使用 Xdocument 进行简单的 Xml 解析
Posted
技术标签:
【中文标题】使用 Xdocument 进行简单的 Xml 解析【英文标题】:Simple Xml parse with Xdocument 【发布时间】:2012-11-06 21:49:19 【问题描述】:我想用 Xdocument 在 Windows 商店应用程序中解析 xml。
我试过这个,但返回 null:
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....'/>
如何从属性中检索文本?
【问题讨论】:
请澄清 - 您想要title
元素的值还是type
属性的值。
您的 XML 无效。您需要有一个根元素。
【参考方案1】:
正如 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。
【讨论】:
使用Root
很好。我不喜欢使用.Value
,而是转换为string
,因为如果元素上没有type
属性,Attribute
方法将返回null
,调用Value
属性将导致NullReferenceException
。如果转换为string
,则返回的值将简单地为空,string
类型可以持有。
@ZevSpitz 我想这取决于预期的 XML 结构,但我喜欢你的方法。我相信它会派上用场的。我通常在这种情况下使用!= null
检查。
How to: Retrieve the Value of an Element (LINQ to XML).【参考方案2】:
试试:
var types =
from e in xDoc.Descendants()
select (string)e.Attribute("type");
foreach (string type in types)
Console.WriteLine(type);
【讨论】:
它是否为所有元素返回null
?还是只为其中之一?以上是关于使用 Xdocument 进行简单的 Xml 解析的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# 使用 XDocument 解析 XML [重复]
我尝试使用 XDocument 解析 xml 文件中的文本,但并非所有结果都如我所愿,为啥?
使用XDocument.Load(xmlreader)方法?