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

エラーメッセージは非常に明確だと思います。ドキュメントオブジェクトはドキュメント全体を意味します。xpathによると、「doc.SelectSingleNode(xpath)」はドキュメントの子ではなく、子孫であるため、例外がスローされます。
ノードの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 に答える