我有一个指向 XML 元素的 XPathNavigator 对象。我想将元素重命名为另一个名称(并重命名关联的结束元素)。这可以使用 XPathNavigator 完成吗?
(我有一个解决方法,即删除元素并以不同的名称重新插入它,但这可能会导致性能问题,因为我正在处理非常大的文档)
我有一个指向 XML 元素的 XPathNavigator 对象。我想将元素重命名为另一个名称(并重命名关联的结束元素)。这可以使用 XPathNavigator 完成吗?
(我有一个解决方法,即删除元素并以不同的名称重新插入它,但这可能会导致性能问题,因为我正在处理非常大的文档)
这取决于您的底层 XML 文档表示是什么。如果您使用的是 XDocument,您可以执行以下操作:
(XElement)(navigator.UnderlyingObject).Name = ...
我认为 XmlDocument (除非您建议)或 XPathDocument 是不可能的。
对于对这个问题感兴趣的其他人,如果我正确理解了这个问题,并且您想要重命名元素节点,那么我发现使用 ReplaceSelf 从 XPathNavigator 很容易做到这一点。我正在使用 .Net 框架 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);