解析XDocument的属性

时间:2010-12-16 01:39:10

标签: c# .net linq linq-to-xml

我试图像这样解析XML文件:

<books>
   <book>
      <attr name="Moby Dick">Moby Dick is a classic</attr>
      <attr isbn="isbnNumber">123456789</attr>
   </book>
</books>

如何获取“123456789”的值?我真的不需要第一个属性。

我尝试在获取XElements的foreach循环中读取这些内容,但我一直收到NULL对象异常。

foreach(XElement xe in XDoc.Attribute("attr"))
{
   string str = xe.Attribute("isbnNumber").Value   // NULL EXCEPTION HERE
} 

提前致谢...

3 个答案:

答案 0 :(得分:2)

您可以尝试使用XPathSelectElement()扩展方法[您需要使用System.Xml.XPath来获取它们]。

E.g。

var isbn = xDoc.XPathSelectElement("//book/attr[@isbn='isbnNumber']").Value

PS。一个好的XPath测试器位于:http://www.yetanotherchris.me/home/2010/6/7/online-xpath-tester.html

答案 1 :(得分:1)

123456789实际上是元素的值,而不是属性。你想要的是这样的:

XElement attr = xDoc.Descendants("attr")
                    .FirstOrDefault( x=> 
                        (string)x.Attribute("isbn") == "isbnNumber"
                    );

string isbn = (string)attr;

你甚至可以使它成为一行,但如果你是LINQ to XML的新手,这可能更容易理解。

答案 2 :(得分:0)

好吧,我无法弄清楚如何回应个别答案.....但我实施了它们并且它们都有效。

我将使用Reddog的答案,因为它更简单一点,并且是LINQ的新手,因此对于可读性而言,它是最简单的。

感谢您的回复!