获取特定节点的xml属性值

时间:2014-05-07 09:46:43

标签: c# xml

<root>
 <A testId ="test">
    <B  id="ABC">one
    </B>
    <B id="ZYZ">two
    </B>
    <B  id="QWE">three
    </B>
    <B>four
    </B>
  </A>
</root>

需要为节点testId提取<A>的属性值。我使用了以下 c#代码但是,它抛出了null异常。

doc.XPathSelectElement("//A/@testId")

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:4)

您无法通过XPath获取属性(实际上XPathSelectElement方法名称状态,其目的是选择元素)。所以,你应该选择element,然后获取它的属性(假设你使用Linq to XML。如果不是,我建议你开始这样做):

(string)doc.XPathSelectElement("//A").Attribute("testId")

实际上,在这种情况下,XPath的使用没有任何好处:

(string)doc.Root.Element("A").Attribute("testId")

答案 1 :(得分:0)

假设您有xml文件XMLFile1.xml然后尝试下面的代码,它将给出结果test

 XDocument xDoc = XDocument.Load("XMLFile1.xml");
 var test = xDoc.Root.Element("A").Attribute("testId").Value;

更新: -

正如谢尔盖所​​建议的那样,使用cast比访问Value属性更安全所以更新代码如下

var test = (string)xDoc.Root.Element("A").Attribute("testId");