如何找到包含子字符串的节点?

时间:2015-06-14 18:02:15

标签: xml xpath vbscript asp-classic

我可以使用以下语句在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

2 个答案:

答案 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)