Web services web服务以XmlNode的形式返回XmlDocument,然后XPath不会';不行?
我尝试使用一个web服务/方法,它接受XmlDocument并返回XmlDocument。当我在C#应用程序中添加对此web服务的引用时,代理代码被定义为使用XmlNodes而不是XmlDocuments。这似乎是相当公认的行为(但确认和/或解释将是很好的-见此) 但是,如果我获取返回的XmlNode对象并尝试对“SelectNodes(XPath)”执行简单的XPath查询,则找不到任何节点,但匹配的节点确实存在 但是,如果我获取返回的XmlNode的OuterXml,并从中创建一个新的XmlDocument,那么XPath查询将找到我期望的节点 为什么呢?返回的XmlDocument/XmlNode(或两者之间的转换)是什么导致XPath查询无法按预期工作的 谢谢 编辑: Xml如下所示:Web services web服务以XmlNode的形式返回XmlDocument,然后XPath不会';不行?,web-services,xpath,Web Services,Xpath,我尝试使用一个web服务/方法,它接受XmlDocument并返回XmlDocument。当我在C#应用程序中添加对此web服务的引用时,代理代码被定义为使用XmlNodes而不是XmlDocuments。这似乎是相当公认的行为(但确认和/或解释将是很好的-见此) 但是,如果我获取返回的XmlNode对象并尝试对“SelectNodes(XPath)”执行简单的XPath查询,则找不到任何节点,但匹配的节点确实存在 但是,如果我获取返回的XmlNode的OuterXml,并从中创建一个新的Xml
<Results xmlns="">
<Result>
:
<Success>True</Success>
</Result>
<Result>
:
<Success>False</Success>
</Result>
</Results>
创建自己的XmlDocument的一种替代方法是使用Linq,如下所示:
Dim results As XDocument = XDocument.Parse(xmlResults.OuterXml)
If (results.Descendants("Success").Count(Function(node) node.Value.ToLower() = "false") > 0) Then
Throw New ApplicationException("Results returned indicate a problem:- " + xmlResults.OuterXml)
End If
您尝试的XPath看起来如何?XML看起来如何?如果您有一个无父的
XmlNode
,那么以/
开头的路径可能与XmlDocument
不同。或者,如果您有一个xmlement
返回的bar
,那么当然路径需要与root
元素相关,因此您可以使用类似root.SelectNodes(“foo”)的路径
要查找返回的root
元素的所有foo
子元素,同时使用完整的XmlDocument,可以使用doc.SelectNodes(“root/foo”)
或doc.SelectNodes(“/root/foo”)
。
Dim results As XDocument = XDocument.Parse(xmlResults.OuterXml)
If (results.Descendants("Success").Count(Function(node) node.Value.ToLower() = "false") > 0) Then
Throw New ApplicationException("Results returned indicate a problem:- " + xmlResults.OuterXml)
End If