我试图像这样解析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
}
提前致谢...
答案 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的新手,因此对于可读性而言,它是最简单的。
感谢您的回复!