1

我得到一个有点复杂的 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

谢谢

4

3 回答 3

1

Response 元素定义了一个默认命名空间。

<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.aspxhttp://msdn.microsoft.com/en-us/library/d271ytdx.aspx

于 2013-10-09T00:42:32.173 回答
0

我觉得这行得通!

XmlNodeList myElemList = xdoc.GetElementsByTagName("Usful");
于 2013-10-09T00:31:02.720 回答
0

您必须使用XmlNamespaceManager因为您声明了命名空间(这一​​行xmlns="http://somewhere/somewhere/")。

在 XmlNodelist 中查看这个问题XmlNode 的答案

了解 Xml 命名空间将极大地帮助您。试试这篇文章。http://www.jclark.com/xml/xmlns.htm

于 2013-10-09T00:35:15.733 回答