在使用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对象中使用的当前名称空间前缀?
答案 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输入使用的实际前缀(如果有)。