C# XML 无法获取 sub-sub-sub 节点
本文关键字:sub-sub-sub 节点 获取 XML | 更新日期: 2023-09-27 18:34:25
我得到一个有点复杂的XML来获取就像:
<Response xmlns="http://somewhere/somewhere/">
<Params>
<Param>
<Name>some data</Name>
<Value xmlns="">abcdedsfeesfxyz0123456789</Value>
</Param>
<Param>
<Name>Target</Name>
<Value xmlns="">xml</Value>
</Param>
<Param>
<Name>Platform</Name>
<Value xmlns="">Mobile</Value>
</Param>
</Params>
<Results>
<Groups>
<Group>
<Key>ABCWXYZ0123456789</Key>
<TotalCount>1208</TotalCount>
<Useful>...</Useful>
</Group>
</Groups>
</Results>
</Response>
对我来说有用的数据在<Useful>...</Useful>
然后我尝试获取第一层:
String returnXML = client.DownloadString(strUrl);
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(returnXML);
XmlNode xmlData = xdoc.SelectSingleNode("Response");
xmlData
中没有数据
谢谢
响应元素定义了默认命名空间。
<Response xmlns="http://somewhere/somewhere/">
您需要在传递给 SelectSingleNode 的 XPath 表达式中解析此命名空间。您可以使用 XmlNamespaceManager 完成此操作:
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(returnXml);
var mng = new XmlNamespaceManager(xdoc.NameTable);
mng.AddNamespace("foo", "http://somewhere/somewhere/");
XmlNode xmlData = xdoc.SelectSingleNode("foo:Response",mng);
请参阅 MSDN:http://msdn.microsoft.com/en-us/library/h0hw012b.aspx 和http://msdn.microsoft.com/en-us/library/d271ytdx.aspx
嗯
我发现这有效!
XmlNodeList myElemList = xdoc.GetElementsByTagName("Usful");
您必须使用 XmlNamespaceManager,因为您声明了命名空间(此行xmlns="http://somewhere/somewhere/"
)。
请参阅XmlNodelist中XmlNode的答案
了解 Xml 命名空间将极大地帮助您。试试这篇文章。http://www.jclark.com/xml/xmlns.htm