如何找到包含子字符串的节点?
How can I find a node containing a sub-string?
我可以使用以下语句在 XML 文件中找到节点:
Set user = objXMLDoc.selectSingleNode("//user[@id = '" & id & "']")
但我正在阅读的 XML 文件是自动生成的,有时在 ID 后包含 spaces。 user
节点的 id
属性可能如下所示:
<user id="E12345" name="Dan Smith">
<user id="E12345 " name="Dan Smith">
目前这似乎是数据中唯一的变化。我无法控制文件的生成,也无法在那一端强制使用 TRIM。所以我必须在我的代码中处理。
解决此问题的最简单方法是什么?我可以使用某种 InStr
方法吗?
目前我正在围绕它进行编码,但这感觉很笨拙并且只在有一个额外的时候处理异常 space:
Set user = objXMLDoc.selectSingleNode("//user[@id = '" & id & "']")
If user Is Nothing Then
Set user = objXMLDoc.selectSingleNode("//user[@id = '" & id & " ']")
End If
您可以使用 contains()
:
Set user = objXMLDoc.selectSingleNode("//user[contains(@id,'" & id & "')]")
或者如果空格只出现在字符串的末尾,您可以使用 starts-with()
:
Set user = objXMLDoc.selectSingleNode("//user[starts-with(@id,'" & id & "')]")
使用 normalize-space()
函数删除 leading/trailing 空格:
xpath = "//user[normalize-space(@id) = '" & id & "']"
Set user = objXMLDoc.selectSingleNode(xpath)
请注意,您需要使用 XML 库的版本 6 才能正常工作:
Set objXMLDoc = CreateObject("Msxml2.DOMDocument.6.0")
早期版本不提供此方法,所以你会得到一个"unknown method"错误:
Unknown method.
//user[-->normalize-space(@<--id)='E12345'] (0x80004005)
我可以使用以下语句在 XML 文件中找到节点:
Set user = objXMLDoc.selectSingleNode("//user[@id = '" & id & "']")
但我正在阅读的 XML 文件是自动生成的,有时在 ID 后包含 spaces。 user
节点的 id
属性可能如下所示:
<user id="E12345" name="Dan Smith">
<user id="E12345 " name="Dan Smith">
目前这似乎是数据中唯一的变化。我无法控制文件的生成,也无法在那一端强制使用 TRIM。所以我必须在我的代码中处理。
解决此问题的最简单方法是什么?我可以使用某种 InStr
方法吗?
目前我正在围绕它进行编码,但这感觉很笨拙并且只在有一个额外的时候处理异常 space:
Set user = objXMLDoc.selectSingleNode("//user[@id = '" & id & "']")
If user Is Nothing Then
Set user = objXMLDoc.selectSingleNode("//user[@id = '" & id & " ']")
End If
您可以使用 contains()
:
Set user = objXMLDoc.selectSingleNode("//user[contains(@id,'" & id & "')]")
或者如果空格只出现在字符串的末尾,您可以使用 starts-with()
:
Set user = objXMLDoc.selectSingleNode("//user[starts-with(@id,'" & id & "')]")
使用 normalize-space()
函数删除 leading/trailing 空格:
xpath = "//user[normalize-space(@id) = '" & id & "']"
Set user = objXMLDoc.selectSingleNode(xpath)
请注意,您需要使用 XML 库的版本 6 才能正常工作:
Set objXMLDoc = CreateObject("Msxml2.DOMDocument.6.0")
早期版本不提供此方法,所以你会得到一个"unknown method"错误:
Unknown method.
//user[-->normalize-space(@<--id)='E12345'] (0x80004005)