Как получить доступ к XML-узлу с помощью специального символа из XmlDocument, используя SelectNodes в c # - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть следующий XML:

<Doc>
 <Entries>
  <Entry>
    <RowA>Test</RowA>
    <RowB>Hello</RowB>
    <Row:C>Try to Access me </Row:C>
  </Entry>

  <Entry>
    <RowA>Try Again</RowA>
    <RowB>Hello2</RowB>
    <Row:C>Try to Access me again </Row:C>
  </Entry>

  </Entries>
</Doc>

Следуя моему коду, все работает нормально, кроме строки: C

XmlNodeList xmlNodeList = xmlFile.SelectNodes("Doc/Entries/Entry");

foreach (XmlNode xmlNode in xmlNodeList)
{
 String _Ok = xmlNode.SelectSingleNode("RowA").InnerText;
 String _Error = xmlNode.SelectSingleNode("Row:C").InnerText;  // ERROR
}

После ошибки:

Диспетчер пространства именили XsltContext требуется.Этот запрос имеет префикс, переменную или пользовательскую функцию.

Заранее благодарим за ваше время.

1 Ответ

0 голосов
/ 12 декабря 2018

Ваш xml содержит пространство имен, поэтому вам нужно использовать XmlNamespaceManager для разрешения пространства имен для префиксов в выражении XPath.

class Program
{
    static void Main(string[] args)
    {
        XmlDocument doc = new XmlDocument();

        doc.Load(@"Path to your xml file");

        XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
        ns.AddNamespace("Row", "http://www.namespace.com/");    // <= Replace your namespace here that start with "xmlns:Row="http://www.namespace.com/"" in root of document
        XmlNodeList nodes = doc.SelectNodes("//Doc//Entries//Entry//*", ns);

        foreach (XmlNode node in nodes)
        {
            Console.WriteLine(node.InnerText);
        }

        Console.ReadLine();
    }
}

Вывод:

enter image description here

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