XPath多属性条件变量

时间:2015-04-20 23:20:25

标签: xml vba dom xpath xml-parsing

示例XML

<catalog>
    <book id="Adventure" Type="Hardcover">
        <other>
            <author name="Jones" id="Adventure">
            </author>
        </other>
    </book>
</catalog>

这些陈述有意义吗?我需要进行健全性检查以查看所有这些变量/引号的内容。我尝试使用其中一个XPath测试站点,但它一直给我一个错误,我不知道为什么。

bookVar = "Adventure"
bookStyle = "Hardcover"
bookAuthor = "Jon"

Set my_location = XMLFile.SelectNodes("/catalog/book[@id=""" & bookVar & """]/author/other/*[contains(name(),""" & bookAuthor & """]")

Set my_location2 = XMLFile.SelectNodes("/catalog/book[@id=""" & bookVar & """ and Type=""" & bookStyle &"""]

Set my_location3 = XMLFile.SelectNodes("/catalog/book[@id=""" & bookVar & """]/other/author/*[contains(name(),""" & bookAuthor & """]")

1 个答案:

答案 0 :(得分:4)

几点说明:

  • 在属性名称的开头使用@来引用xpath中的XML属性

  • 我建议在xpath中使用单引号,因为使用的字符串包装字符是双引号。这将使您的代码看起来更清晰。

  • name()返回当前上下文元素/属性的名称,使用@name代替引用名为name

  • 的XML属性
  • 您的某些路径与XML文档中元素的确切层次结构不对应

示例xpath查询:

bookVar = "Adventure"
bookStyle = "Hardcover"
bookAuthor = "Jon"

Set my_location = XMLFile.SelectNodes("/catalog/book[@id='" & bookVar & "']/other/author[contains(@name,'" & bookAuthor & "']")

Set my_location2 = XMLFile.SelectNodes("/catalog/book[@id='" & bookVar & "' and @Type='" & bookStyle &"']")