Переименуйте элемент, используя XPathNavigator

У меня есть объект XPathNavigator, указывающий на элемент XML. Я хочу переименовать элемент в другое имя (а также переименовать связанный конечный элемент). Можно ли это сделать с помощью XPathNavigator?

(У меня есть обходной путь, который заключается в удалении элемента и повторной вставке его под другим именем, но это может вызвать проблемы с производительностью, потому что я работаю с очень большими документами)

2 ответа

Решение

Это зависит от того, каково ваше базовое представление документа XML. Если вы используете XDocument, вы можете сделать:

(XElement)(navigator.UnderlyingObject).Name = ...

Я не думаю, что это возможно с XmlDocument (кроме как вы предлагаете) или XPathDocument.

Для всех, кто интересуется этим вопросом, и если я правильно понимаю вопрос и вы хотите переименовать узел элемента, то я вижу, что это очень легко сделать из XPathNavigator, используя ReplaceSelf. Я использую.Net Framework версии 4.0, но похоже, что это уже давно.

(быстрый пример C#)

    XmlDocument reportServerDocument = new XmlDocument();
    reportServerDocument.Load("C:\Path\to\ReportServer\rsreportserver.config");

    XPathNavigator reportServerDocumentNavigator = 
        reportServerDocument.CreateNavigator();

    XPathNavigator authenticationTypesNode = 
        reportServerDocumentNavigator.SelectSingleNode(
            "//Authentication/AuthenticationTypes/RSWindowsNegotiate");

    authenticationTypesNode.ReplaceSelf("<Custom/>");

    reportServerDocument.Save("C:\Path\to\ReportServer\rsreportserver.config");
    log.Info("Updated the AuthenticationTypes: " + 
       authenticationTypesNode.OuterXml);
Другие вопросы по тегам