在VB脚本中使用xpath查询XML文件时," context"使用名称空间无关的查询时,所选节点集的丢失:(请参阅下面的' For ... Next'具体示例)
Dim Results :Set Results = CreateObject("Microsoft.XMLDOM")
Results.setProperty "SelectionLanguage", "XPath"
Results.setProperty "SelectionNamespaces", "xmlns:results='http://example.domain.org/XMLSchema/results-example-3'
dim defEXdef
set defEXdef = Results.selectNodes("//*[local-name()='definition']")
dim def
'PROBLEM OCCURS IN THIS FOR...NEXT loop
For Each def in defEXdef
'HERE: The commented line below works successfully to load the "extended_definitions" elements out from the current "def"
'dim extended_definitions : set extend_definitions = def.getElementsByTagName("results:extended_definitions")
'HERE: The line below returns all extended_definitions nodes and ignores the parent's context - as though "def" is now the whole document
dim extended_definitions : set extended_definitions = def.selectNodes("//*[local-name()='extended_definitions']")
dim edef
For Each edef in extended_definitions
ExDefDict.add edef.text
Next
Next
似乎可以通过删除" //"来解决问题。来自selectNodes
声明,但为什么会这样? " def'代码中的项目包含的信息多于其选择的原始查询?
我没有示例XML,因为这是一个相当人为的例子(原始文档对于发布过于敏感)。如果需要,我可以尝试生成示例XML。
答案 0 :(得分:1)
如果您使用//
开始路径,则会从文档节点向下搜索,使用def.selectNodes(".//*[local-name()='extended_definitions']")
搜索def
节点的后代,而不是文档节点的后代。