Как получить все пространства имен документа XML для правильной оценки XPath? - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь оценить простой 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 Ответ

0 голосов
/ 29 октября 2018

Если вы не знаете пространства имен во время компиляции, вы, вероятно, можете использовать этот XPath:

//*[local-name() = 'Name']

Этот XPath выбирает все Name элементы.

...