我可以使用以下语句在XML文件中查找节点:
Set user = objXMLDoc.selectSingleNode("//user[@id = '" & id & "']")
但我读取的XML文件是自动生成的,有时在ID之后包含空格。 id
节点的user
属性可能如下所示:
<user id="E12345" name="Dan Smith">
<user id="E12345 " name="Dan Smith">
现在这似乎是数据中唯一的变化。我无法控制文件的生成,也无法在此结束强制TRIM。所以我必须处理我的代码。
解决这个问题最简单的方法是什么?我可以使用某种InStr
方法吗?
目前我正在这样编码,但是这感觉很笨拙,只有在有一个额外空间时才处理异常:
Set user = objXMLDoc.selectSingleNode("//user[@id = '" & id & "']")
If user Is Nothing Then
Set user = objXMLDoc.selectSingleNode("//user[@id = '" & id & " ']")
End If
答案 0 :(得分:3)
您可以使用contains()
:
Set user = objXMLDoc.selectSingleNode("//user[contains(@id,'" & id & "')]")
或者如果空格仅出现在字符串的末尾,则可以使用starts-with()
:
Set user = objXMLDoc.selectSingleNode("//user[starts-with(@id,'" & id & "')]")
答案 1 :(得分:3)
使用normalize-space()
函数删除前导/尾随空格:
xpath = "//user[normalize-space(@id) = '" & id & "']"
Set user = objXMLDoc.selectSingleNode(xpath)
请注意,您需要使用XML库的第6版才能实现此目的:
Set objXMLDoc = CreateObject("Msxml2.DOMDocument.6.0")
早期版本没有提供此方法,因此您将获得一种未知方法&#34;错误:
未知方法。
//用户[ - &gt; normalize-space(@&lt; - id)=&#39; E12345&#39;](0x80004005)