C # Xpath не может получить элемент по имени - PullRequest
0 голосов
/ 03 февраля 2019

Документ загружен в XmlDocument со следующей структурой

<?xml version="1.0" encoding="UTF-8"?>
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">
  <stylesheet type="text/css"></stylesheet>
  <description>...</description>
  <body>...</body>
  <binary id="19317.jpg" content-type="image/jpeg">...</binary>
</FictionBook>

Следующие методы возвращают мне null (или пустую коллекцию, если я использую SelectNodes):

doc.SelectSingleNode("body");
doc.SelectSingleNode("//body");
doc.LastChild.SelectSingleNode("body");
doc.LastChild.SelectSingleNode("//body");

Но этот работает правильно

doc.LastChild["body"];

Почему XPath не дает мне никаких результатов?

1 Ответ

0 голосов
/ 03 февраля 2019

doc.SelectSingleNode("//body"); не работает, потому что body объявлено в определенном пространстве имен "http://www.gribuser.ru/xml/fictionbook/2.0",, поэтому для его запроса вы можете написать код следующим образом:

var mgr = new XmlNamespaceManager(new NameTable());
mgr.AddNamespace("whatever", "http://www.gribuser.ru/xml/fictionbook/2.0");
var node = doc.SelectSingleNode("//whatever:body", mgr);

doc.LastChild["body"]; работает, потому что реализация поддерживает его, но вы можете использовать его следующим образом, чтобы избежать двусмысленности:

doc.LastChild["body", "http://www.gribuser.ru/xml/fictionbook/2.0"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...