gpt4 book ai didi

xml - XPath 使用 MSXML2 失败

转载 作者:行者123 更新时间:2023-12-02 13:59:16 24 4
gpt4 key购买 nike

我正在使用 VBA 通过 MSXML2 和 XPath 解析soap xml,但是虽然 XPath 查询可以在各种工具中工作,但它不会在 selectNodes 方法中选择任何内容。根据我从迄今为止看到的众多问题中收集到的信息,我可以使用这种“本地名称”语法而不是指定 namespace ,但不会选择任何内容。我做错了什么?

private const DQ = """"
Public Sub parseXML(sFileName As String)
Dim xmldoc As New MSXML2.DOMDocument60, I As IXMLDOMNodeList, x As IXMLDOMNode

With xmldoc
.loadXML sFileName
.SetProperty "SelectionLanguage", "XPath"
Set I = .selectNodes("//*[local-name()=" & DQ & "item" & DQ & "]")
If I.length > 0 Then
' do something useful
end if
End With
End Sub


<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header></soap-env:Header>
<soap-env:Body>
<n0:ZBexQaasResponse xmlns:n0="urn:sap-com:document:sap:soap:functions:mc-style">
<Messages>
<item>
// some elements
</item>
</Messages>
<OutputTable>
<item>
// some elements
</item>
</OutputTable>
<TextElements></TextElements>
<XmlOutput></XmlOutput>
<XmlTxtelem></XmlTxtelem>
</n0:ZBexQaasResponse>
</soap-env:Body>
</soap-env:Envelope>

最佳答案

我不明白为什么代码(使用 load 而不是 loadXML 以及必要的 async 设置,正如评论中已经建议的那样)应该不起作用,当我将文件 test2012011901.xml 作为

时,我无法重现该问题
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header></soap-env:Header>
<soap-env:Body>
<n0:ZBexQaasResponse xmlns:n0="urn:sap-com:document:sap:soap:functions:mc-style">
<Messages>
<item>
// some elements
</item>
</Messages>
<OutputTable>
<item>
// some elements
</item>
</OutputTable>
<TextElements></TextElements>
<XmlOutput></XmlOutput>
<XmlTxtelem></XmlTxtelem>
</n0:ZBexQaasResponse>
</soap-env:Body>
</soap-env:Envelope>

和 VBScript 代码

Dim doc, items
Set doc = CreateObject("Msxml2.DOMDocument.6.0")
doc.async = False
If doc.load("test2012011901.xml") Then
Set items = doc.selectNodes("//item")
WScript.Echo "Found " & items.length & " element(s)."
For Each item In items
WScript.Echo item.xml
Next
Set items = doc.selectNodes("//*[local-name() = 'item']")
WScript.Echo "Found " & items.length & " element(s)."
For Each item In items
WScript.Echo item.xml
Next
Else
WScript.Echo "Parse error " & doc.parseError.reason
End If

然后两个 XPath 表达式都会找到两个 item 元素,如输出所示:

Found 2 element(s).
<item>
// some elements
</item>
<item>
// some elements
</item>
Found 2 element(s).
<item>
// some elements
</item>
<item>
// some elements
</item>

据我所知,评论中的建议应该可以解决您的问题,如果您仍然有问题,则需要详细说明。

关于xml - XPath 使用 MSXML2 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8912294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com