使用XDocument进行简单的XML解析

3

我想在Windows商店应用程序中使用Xdocument解析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 属性的值。 - Zev Spitz
你的XML无效。你需要有一个单一的根元素。 - Zev Spitz
2个回答

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。


使用Root是个好选择。我更喜欢不使用.Value,而是将其转换为string类型,因为如果元素上没有type属性,Attribute方法将返回null,调用Value属性将导致NullReferenceException异常。如果转换为string类型,则返回的值将简单地为null,这可以由string类型保存。 - Zev Spitz
@ZevSpitz 我猜这取决于预期的XML结构,但我喜欢你的方法。我相信它会派上用场。在这种情况下,我通常使用'!= null'进行检查。 - Damir Arh
1
如何:检索元素的值(LINQ to XML) - Zev Spitz

0

尝试:

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

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

它是否对所有元素返回null?还是只对其中一个元素返回? - Zev Spitz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接