0

我整天都在与 XmlDocuments 进行战争。他们正在获胜。我正在.net 2.0 中构建一个组件,因此被迫使用它。请看看这个并帮助我恢复理智:

        private static string UpdateMeterAccessXml(string meterAccess, int childToUpdate, string field, string value)
    {
        var doc = new XmlDocument();
        doc.LoadXml(meterAccess);
        var xpath = String.Format("/items/item[{0}]/{1}", childToUpdate, field);           
        var modNode = doc.SelectSingleNode(xpath);

        modNode.InnerText = value;

        doc.ReplaceChild(modNode, doc.SelectSingleNode(xpath));
        return doc.OuterXml;
    }

doc.ReplaceChild 产生一个 ArgumentException(“要删除的节点不是该节点的子节点。”)

我认为由于 XmlDocument 是一种引用类型,我不必尝试换出节点,但如果我只是更新我想要的节点的 InnerText,则 doc.OuterXml 不会反映更改。

4

1 回答 1

0

我认为错误消息很清楚,doc对象表示整个文档,根据您的xpath,“doc.SelectSingleNode(xpath)”不是doc的孩子,而是后代,所以它抛出了异常。
您可以更新节点的 InnerText,doc.OuterXml 将反映更改。以下代码对我来说很好:

XmlDocument doc = new XmlDocument();
doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5'>" +
           "<title>Pride And Prejudice</title>" +
           "</book>");

string xPath = "/book/title";
XmlNode node = doc.SelectSingleNode(xPath);
node.InnerText = "new title";
Console.WriteLine(doc.OuterXml); //it's changed  
于 2013-03-22T03:37:56.780 回答