2015-12-14 5 views
0

При использовании объекта XML я должен предвидеть, что префиксы пространства имен используются время от времени (например, 3P печально известен, иногда даже включая префикс в каждом элементе и позволяя ему подразумевать его родительский элемент). Я понимаю, как обойти это в .NET, но для этого проекта мне необходимо использовать объекты VFP и Microsoft.xmldom.Измените префикс пространства имен элементов XML с помощью Microsoft.xmldom, чтобы использовать 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 пространства имен всегда будет таким же, а фактические префиксы просто пух. Ключ должен установить свойство SelectionNamespaces.

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