Доступ к узлам XML с помощью атрибута xml: lang - PullRequest
0 голосов
/ 08 февраля 2019

Я загружаю файл XML в файл VBScript с помощью

Set xmlDoc = CreateObject("MSXML2.DOMDocument.3.0")
xmlDoc.Async = "False"
xmlDoc.Load("C:\languageContent.xml")

XML имеет пространство имен, настроенное следующим образом

<languageDefinition xmlns:xml="http://www.w3.org/XML/1998/namespace">

Я не могу получить доступ к каким-либо текстовым узлам вдокумент.

Я использовал следующее

ns = "xmlns:xml='http://www.w3.org/XML/1998/namespace'"
xmlDoc.setProperty "SelectionNamespaces", ns

Но это выдает ошибку, что 'xml' является зарезервированной строкой.

XML выглядит следующим образом

<?xml version="1.0" encoding="utf-8"?>
<languageDefinition xmlns:xml="http://www.w3.org/XML/1998/namespace">
    <colourGroups>
    <group id='1' colour='0x5b9bd5'>
        <text xml:lang='en'>Group 1</text>
    </group>
    </colourGroups>
</languageDefinition>

У меня есть следующий код

xmlText = xmlDoc.selectNodes("/languageDefinition/colourGroups/group/text[@xml:lang='en']")(0).text

Я ожидаю, что это выведет Group 1

Но вместо этого я получаю сообщение об ошибке, что строка 'xml' зарезервирована.

Если я изменю пространство имен в xml-файле на

<languageDefinition xmlns:blah="http://www.w3.org/XML/1998/namespace">

и поменяю свой vbscript на

xmlDoc.setProperty "SelectionNamespaces", "xmlns:blah='" & uri & "'"

, тогда все будет работать как положено.

Но ... я не могу изменить xml, так как он нам предоставлен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...