Как получить все пространства имен документа XML для правильной оценки XPath?
Я пытаюсь оценить простой xpath
"//pr:Name"
для этого XML
<?xml version="1.0" encoding="utf-8"?>
<pr:Products xmlns:pr="http://www.example.com/">
<pr:Name>Coffee</pr:Name>
</pr:Products>
но я получаю XML-файл во время выполнения, т.е. я не могу заполнить XmlNamespaceManager, используя метод AddNamespace() (поэтому оценка не удалась). Я пытался сделать этот трюк
XDocument xdoc;
XmlReader reader;
using (var stream = new FileStream("test.xml", FileMode.Open))
{
reader = new XmlTextReader(stream);
xdoc = XDocument.Load(reader);
}
var nsManager = new XmlNamespaceManager(reader.NameTable);
var xpath = "//pr:Name";
var xvalue = xdoc.XPathEvaluate(xpath, nsManager);
но это не помогает мне. У вас есть идеи, как разрешить пространства имен для XPath или оценить XPath другим способом? Спасибо!
1 ответ
Решение
Если вы не знаете пространства имен во время компиляции, вы можете использовать этот XPath:
//*[local-name() = 'Name']
Этот XPath выбирает все Name
элементы.