有些文件'XMLNS'列出,有些文件只是"XSI"。如何为适用于其中之一的 xpath 查询设置别名?



我需要处理的一些文件有这个(称为"haves"(:

<ApolloDataSet xmlns="http://irisoft.com/ApolloDataSet1.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

同一组中的其他文件具有以下内容(称为"have-nots"(:

<ApolloDataSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  

我可以使用以下内容为 xpath 设置默认命名空间:

.setProperty "SelectionNamespaces", "xmlns:a='http://irisoft.com/ApolloDataSet1.xsd'"

这适用于 haves,例如 a:/Element,但不适用于 have-nots,因为 xpath 没有 a: 别名。

我尝试在处理之前删除 xmlns 属性,希望我可以对两者使用无别名路径,例如/Element,但这仅适用于穷人(haves 什么也没返回(。

那么有没有办法使用相同的别名或不使用别名来处理两者? 我正在尝试对每个文件使用相同的别名,无论列出"xmlns",或者不对任何一个文件使用别名。

好吧,我放弃了使用我试图避免的解决方法。 但是在我找到更好的选择之前,这是这种情况的一个选择。 (忘了提到 - 为此使用 VBA。

加载 domDocument 后,我使用 getAttribute 方法来检查 "xmlns" 属性值是否为空。 如果是,我通过 vbnullstring 形成没有别名的 xpath 字符串,这意味着 xpath 查询适用于没有文件(即那些没有列出"xmlns"的文件(。 如果它不为 null,我使用 "xmlns" 值为 setProperty 方法构建一个字符串,用于设置 "SelectionNamespaces" 辅助属性。

If IsNull(xPOG.DocumentElement.getAttribute("xmlns")) Then
    strAlias = vbNullString
Else
    strAlias = "a:"
    xPOG.setProperty "SelectionNamespaces", _
    "xmlns:" & Mid(strAlias, 1, 1) & "='" & xPOG.DocumentElement.getAttribute("xmlns") & "'"
End If

由此产生的处理呈现出一种相当丑陋的字符串构建形式,我希望避免这种形式。它使用 xPath 查询和 strAlias 变量,将 IXMLDOMNode 设置为从 selectnodes 方法返回的节点。

Set xProducts = xPOG.SelectNodes("/" & strAlias & "ApolloDataSet/" _
                                & strAlias & "Products/" _
                                & strAlias & "Product/" _
                                & strAlias & "PR_UPC")

这并不是说它不好,它只是似乎缺乏优雅,并提醒我有时我知道的很少。 这让我相信我错过了一些可以纠正这一点的概念。 但它有效,所以如果我找到更好的,我会跟进。 我确实找到了一篇知识库文章,其中涉及了一些概念,如果它对任何人有帮助的话。 不过我使用的是 6.0,所以很好的概念解释,只是不完全是我需要的。

PRB:MSXML 4.0 将子节点的 XML 命名空间属性设置为空值

相关内容

最新更新