我从Web服务中获取了以下xml块:
<?xml version="1.0" encoding="utf-16"?>
<ArrayOfItemResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ItemResponse>
<Item xmlns="http://www.xyz.com/ns/2006/05/01/webservices/abc/def">
<RequestKey Name="ESM.PA" Service="" />
<QoS>
<TimelinessInfo Timeliness="REALTIME" TimeInfo="0" />
<RateInfo Rate="TIME_CONFLATED" TimeInfo="10" />
</QoS>
<Status>
<StatusMsg>OK</StatusMsg>
<StatusCode>0</StatusCode>
</Status>
<Fields>
<Field DataType="Utf8String" Name="DSPLY_NAME">
<Utf8String>D15 |ASDFDSAA ETF </Utf8String>
</Field>
</Fields>
</Item>
</ItemResponse>
</ArrayOfItemResponse>
我尝试按如下方式捕获对象中的Status元素,但它无效。
var _xml = XDocument.Parse(xmlFromService);
var stat = _xml
.Descendants("ArrayOfItemResponse")
.Descendants("ItemResponse")
.Descendants("Item")
.Descendants("Status");
对我来说,获得此元素的最佳途径是什么?
答案 0 :(得分:1)
如果要使用System.Xml.Linq,可以使用以下表达式:
var stat = (from n in _xml.Descendants() where n.Name.LocalName == "Status" select n).ToList();
答案 1 :(得分:1)
由于Item
中的xmlns属性,您无法使用现有代码获得所需的结果 <Item xmlns="http://www.xyz.com/ns/2006/05/01/webservices/abc/def">
答案 2 :(得分:0)
我不知道最好的方法,但你可以像这样阅读
XmlDocument xdoc = new XmlDocument();
xdoc.Load(stream);
var statMsg = xdoc.GetElementsByTagName("StatusMsg")[0].InnerText;
var statCode = xdoc.GetElementsByTagName("StatusCode")[0].InnerText;
答案 3 :(得分:0)
使用xpath,类似于
var stat = _xml.SelectSingleNode(@"ArrayOfItemResponse/ItemResponse/ItemStatus/StatusCode").Value;
应该将值0放入stat。
答案 4 :(得分:0)
您的xml代码使用命名空间。
XNamespace ns = "http://www.xyz.com/ns/2006/05/01/webservices/abc/def";
var stat = _xml.Descendants(ns + "Status");