使用Microsoft.xmldom更改XML元素的名称空间前缀,以便使用GetElementsByTagName

时间:2015-12-14 16:12:33

标签: xml namespaces visual-foxpro prefix xmldom

在使用XML对象时,我需要预测不时使用的命名空间前缀不同(3P因此而臭名昭着,有时甚至不包括每个元素中的前缀并让它隐含在其中父母)。我理解如何在.NET中解决这个问题,但是这个项目要求我使用VFP和Microsoft.xmldom对象。

问题在于,当我使用GetElementsByTagName时,如果没有使用前缀或者它已被更改,我找不到该元素:

<ExampleTag>Example</ExampleTag>

loNode = loRoot.getElementsByTagName("ns2:ExampleTag").Item(0)

副Versa:

<ns2:ExampleTag>Example</ns2:ExampleTag>

loNode = loRoot.getElementsByTagName("ExampleTag").Item(0)

我一直在阅读关于getElementsByTagNameNS的内容,但它总是出错,说明它没有评估对象。

如果我知道名称空间URI总是相同的,我是否可以不利用这个优势并以某种方式忽略/更改XML对象中使用的当前名称空间前缀?

1 个答案:

答案 0 :(得分:1)

你是对的,如果命名空间URI总是相同,那么实际的前缀就是绒毛。关键是设置SelectionNamespaces属性。

oDoc = createobject("MSXML2.DOMDocument.6.0")
oDoc.setProperty("SelectionNamespaces", [xmlns:foo="] + m.cNamespaceURI + ["])
oDoc.LoadXML(...)

with oDoc.selectNodes("//foo:ExampleTag")
   ...
endwith

通过这种方式,您可以根据您选择的前缀(此处为foo)选择节点,而不管XML输入使用的实际前缀(如果有)。