Динамическое чтение префиксных пространств имен xml во время выполнения с C # XPath - PullRequest
0 голосов
/ 13 декабря 2018

Я работаю над проектом .net, который работает с несколькими типами данных, хранящихся в xml.

Пример строки xml, как показано ниже:

<?xml version="1.0" encoding="utf-8"?>
<wb:countries xmlns:wb="http://www.worldbank.org">
  <wb:country id="ABW" xmlns:wk="http://www.wikipedia.org">
    <wb:name>Aruba</wb:name>
    <wk:abc>15555</wk:abc>
  </wb:country>
  <wb:country id="ABW2" xmlns:wk1="http://www.wikipedia1.org">
    <wb:name>AAAAA</wb:name>
    <wk1:abc>1666</wk1:abc>
  </wb:country>
</wb:countries>

Теперь мне нужно прочитатьнекоторая информация от XPath: например, мне нужно найти "//wb:name" Я должен установить подходящее пространство имен в xmlNamespaceManager.Кое-что как ниже.

string findingPath = "//wb:name";
StringReader stringReader = new StringReader(xml); // xml is the above content.
XPathDocument res = new XPathDocument(stringReader);
XPathNavigator navigator = res.CreateNavigator();
XmlNamespaceManager xmlNamespaceManager = new XmlNamespaceManager(navigator.NameTable);
xmlNamespaceManager.AddNamespace("wb", "http://www.worldbank.ort");
XPathNodeIterator nodeIterator = navigator.Select(findingPath , xmlNamespaceManager)

Теперь проблема в том, что я не знаю точно все пространство имен, которое мне нужно добавить во время кодирования.Для приведенного выше примера, если я хочу получить значение "wk1:abc", я должен также добавить подходящее пространство имен.Текст xml, который я написал выше, является лишь примером, в моей реальной системе пространство имен может быть гораздо более разнообразным.

Мой вопрос заключается в том, как я могу прочитать XML и добавить подходящее пространство имен во время выполнения (например, для чтенияв строке, содержащей xmlns:wk1="xxx", пара wk1- "xxx" будет помещена в диспетчер пространства имен).Если я читаю весь префикс xml пространства имен при запуске, область имен может быть не совсем для выполнения команды select с findingPath.

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