Я работаю над проектом .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
.