我试图从下面的xml字符串中获取Absoluteentry标记的值,但是它显示的objectrefrence没有设置异常
<?xml version="1.0" ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Body>
<AddResponse xmlns="http://www.sap.com/SBO/DIS">
<PickListParams>
<Absoluteentry>120072</Absoluteentry>
</PickListParams>
</AddResponse>
</env:Body>
</env:Envelope>
代码
XDocument doc = XDocument.Parse(xmlstring);
doc.Element("Envelope").Element("Body").Element("AddResponse").Element("PickListParams").Element("Absoluteentry").Value;
答案 0 :(得分:5)
查看XML:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
...
这是带有URI Envelope
的命名空间中的"http://www.w3.org/2003/05/soap-envelope"
元素。
现在看看你的代码:
doc.Element("Envelope")...
那里正在寻找一个不在任何命名空间中的Envelope
元素。您应该指定命名空间 - 以及您正在寻找的其他元素的命名空间:
XNamespace env = "http://www.w3.org/2003/05/soap-envelope";
XNamespace responseNs = "http://www.sap.com/SBO/DIS";
XDocument doc = XDocument.Parse(xmlstring);
var result = doc.Element(env + "Envelope")
.Element(env + "Body")
.Element(responseNs + "AddResponse")
.Element(responseNs + "PickListParams")
.Element(responseNs + "Absoluteentry").Value;
答案 1 :(得分:0)
您也可以使用Descendants
。 Descendants
找到任何级别的孩子。
var result = doc.Element(env + "Envelope")
.Element(env + "Body")
.Descendants(responseNs + "Absoluteentry").Value;