从 C# 中的 xml 元素获取值
Get value from xml element in c#
我试图从下面的 xml 字符串中获取 Absoluteentry 标签的值,但它显示的对象引用未设置异常
<?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;
看看 XML:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
...
这是命名空间中 URI "http://www.w3.org/2003/05/soap-envelope"
的 Envelope
元素。
现在看看你的代码:
doc.Element("Envelope")...
它正在寻找不在 any 命名空间中的 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;
可以用Descendants
来。 Descendants
在任意级别找到 children。
var result = doc.Element(env + "Envelope")
.Element(env + "Body")
.Descendants(responseNs + "Absoluteentry").Value;
我试图从下面的 xml 字符串中获取 Absoluteentry 标签的值,但它显示的对象引用未设置异常
<?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;
看看 XML:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
...
这是命名空间中 URI "http://www.w3.org/2003/05/soap-envelope"
的 Envelope
元素。
现在看看你的代码:
doc.Element("Envelope")...
它正在寻找不在 any 命名空间中的 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;
可以用Descendants
来。 Descendants
在任意级别找到 children。
var result = doc.Element(env + "Envelope")
.Element(env + "Body")
.Descendants(responseNs + "Absoluteentry").Value;