使用 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简单入门

使用XDocument.Load(xmlreader)方法?

使用C#中的XDocument对DataGridView进行XML查询

XDocument 不会解析 html 实体(例如 ),但 XmlDocument 会