Переименуйте элемент, используя 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);