解析的XDocument
问题描述:
我试图解析这样的XML文件:解析的XDocument
<books>
<book>
<attr name="Moby Dick">Moby Dick is a classic</attr>
<attr isbn="isbnNumber">123456789</attr>
</book>
</books>
我怎样才能获得的“123456789”的价值?我并不需要第一个属性。
我试着在foreach循环中读取这些获取XElements,但我不断收到NULL对象异常。
foreach(XElement xe in XDoc.Attribute("attr"))
{
string str = xe.Attribute("isbnNumber").Value // NULL EXCEPTION HERE
}
在此先感谢...
答
123456789实际上是一个元素的值,而不是属性。你想要什么可以做,像这样:
XElement attr = xDoc.Descendants("attr")
.FirstOrDefault(x=>
(string)x.Attribute("isbn") == "isbnNumber"
);
string isbn = (string)attr;
你甚至可以使一个线,但如果你是新来的LINQ to XML,这可能是更容易阅读。
答
你可以尝试使用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
答
嗯,我无法弄清楚如何响应个人答案.....但我实现了他们两个,他们都工作。
我正在与Reddog的答案,因为它是一个更直接一点,是新的LINQ这是目前最容易阅读的可读性。
感谢您的回复!
一个奇怪的XML ...你为什么要使这些属性'书'而不是'
2010-12-16 01:45:34