使用XPathNavigator重命名元素

时间:2010-09-30 14:56:31

标签: c# .net xml xpathnavigator

我有一个指向XML元素的XPathNavigator对象。我想将元素重命名为另一个名称(并重命名关联的结束元素)。可以使用XPathNavigator完成吗?

(我有一个解决方法,即删除元素并以不同的名称重新插入它,但这可能会导致性能问题,因为我正在处理非常大的文档)

2 个答案:

答案 0 :(得分:1)

这取决于您的基础XML文档表示形式。如果您使用的是XDocument,则可以执行以下操作:

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

我认为XmlDocument(除了你的建议)或XPathDocument都不可能。

答案 1 :(得分:1)

对于对这个问题感兴趣的任何人,如果我正确理解了这个问题,并且你想重命名一个元素节点,那么我发现使用ReplaceSelf从XPathNavigator可以很容易地做到这一点。我正在使用.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);