2015-12-14 75 views
0

在使用XML对象时,我需要预期不同的名称空间前缀(3P因此而臭名昭着,有时甚至没有在每个元素中包括前缀,并让它的父母暗示它)。我明白如何在.NET中解决这个问题,但是这个项目需要我使用VFP和Microsoft.xmldom对象。使用Microsoft.xmldom更改XML元素的名称空间前缀以便利用GetElementsByTagName

的问题是,当我使用的getElementsByTagName,我没有找到元素,如果不使用前缀,或者如果它已经改变:

<ExampleTag>Example</ExampleTag> 

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

,反之亦然:

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

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

我一直在阅读关于getElementsByTagNameNS,但它总是错误,说明它不计算为一个对象。

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

回答

1

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

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

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

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

+0

谢谢,那是票!我曾试过.setproperty方法,但仍在使用.GetElementsByTagName。只要我切换到使用.selectNodes它就像一个魅力。 – MattCash

相关问题