2012-11-18 53 views
3

我想使用Xdocument在Windows Store应用程序中解析xml。使用Xdocument进行简单的Xml解析

我想这一点,但空返回:

XDocument xDoc; 
string title= ""; 

xDoc = XDocument.Load(url); 

var elements = from x in xDoc.Descendants() 
       select new 
       { 
        title = x.Descendants("title").First().Value, 
       }; 

foreach (var el in elements) 
    _title = title; 

的Xml内容:

<title type='text'>tiitle</title> 
<content type='text'> gfgdgdggd</content> 
<link rel='related' type='application/atom+xml' href='http....'/> 

如何能够为retrive从属性的文本?

+0

请说明 - 你想要'title'元素的值还是'type'属性的值。 –

+0

您的XML无效。你需要有一个根元素。 –

回答

3

正如ZevSpitz已经提到的,你的XML是无效的。我修改了一点,能够测试我的代码:

<root> 
    <title type="text">title</title> 
    <content type="text">gfgdgdggd</content> 
</root> 

可以检索与下面的代码从type属性值:如下

XDocument xDoc = XDocument.Parse(xml); 

var types = 
    from x in xDoc.Root.Descendants() 
    select x.Attribute("type").Value; 

在我的情况xml声明:

private string xml = 
    @"<root> 
     <title type=""text"">title</title> 
     <content type=""text"">gfgdgdggd</content> 
    </root>"; 

如果文件内容相同,仍然可以使用代码从URL加载XML。

+0

使用'Root'的好电话。我宁愿不使用'.Value',而是将其转换为'string',因为如果元素上没有'type'属性,则'Attribute'方法将返回'null',并调用'Value'属性将导致一个'NullReferenceException'。如果转换为'string',返回的值将只是null,'string'类型可以容纳。 –

+0

@ZevSpitz我想这取决于预期的XML结构,但我喜欢你的方法。我相信它会派上用场。在这种情况下,我通常使用'!= null'检查。 –

+1

[如何检索元素的值(LINQ to XML)](http://msdn.microsoft.com/zh-cn/library/bb387049%28v=VS.100%29.aspx)。 –

0

尝试:

var types = 
    from e in xDoc.Descendants() 
    select (string)e.Attribute("type"); 

foreach (string type in types) { 
    Console.WriteLine(type); 
} 
+0

不工作,返回null – Evox

+0

是否为所有元素返回'null'?或只为其中之一? –