Я пытаюсь преобразовать узлы, для которых объявлено пространство имен, вместо префикса. Моим первым достижением было просто использовать xslt для преобразования xml, но я начал смотреть на это с помощью класса XmlDocument и использования метода SelectNodes (). Проблема, которую я вижу, заключается в том, что, когда я пытаюсь выбрать узлы, которые имеют пространство имен, он выбирает этот узел И его дочерние элементы. Я предполагаю, что это потому, что он выбирает узел, который содержит дочерние элементы.
<foo xmlns="some url">
<child>child</child>
</foo>
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(xmlstring);
var query = xdoc.SelectNodes("//*[namespace-uri()='some url']");
переменная запроса вернет <foo>
и <child>
узлы, поэтому, когда я пропущу через узлы oop и изменим его чтобы использовать префикс, я получаю следующий результат:
<prefix:foo>
<prefix:child></prefix:child>
</prefix:foo>
Есть ли способ просто вернуть только узел <foo>
в этом случае? Лучше ли использовать xslt для его преобразования?
Я не думал, что вы могли бы изменить пространство имен или префикс при использовании XDocument и XElement, поэтому я использовал XmlDocument.
Обновление
Результат id want будет префиксом только на узле, где было объявление. Это верно xml правильно или префикс должен быть на дочерних элементах, чтобы быть действительным?
<prefix:foo>
<child>child</child>
</prefix:foo>