0

現在、私はlinq to xmlでxpathを使用して、xmlドキュメントの特定の要素の後に要素を追加しています。私の懸念は、この階層が深すぎる場合、常に完全な階層について言及する必要がありますか?どういうわけか直接要素の名前を付けてから、新しい要素を追加することはできません。

このコードでは、この階層について話します:SESSIONANALYSER / AP / MODES / NI / STATEINFORMATION / INIT / INPUT [@ VALUE ='SLN7DEACTIVATION'] / METHOD

String strFile = File.ReadAllText(Server.MapPath("~/SessionAnalyserAccessories.xml"));
            XDocument xdoc1 = XDocument.Parse(strFile);
            xdoc1.XPathSelectElement("SESSIONANALYSER/AP/MODES/NI/STATEINFORMATION/INIT/INPUT[@VALUE='SLN7DEACTIVATION']/METHOD").AddAfterSelf(new XElement("METHOD", "", new XAttribute("NAME", "CHECKSUBSCRIBERBALANCE1"), new XAttribute("PARAMETERS", "SLN7"), new XAttribute("POSSIBLEACTIONS1", "FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE1"), new XAttribute("MAINTAINSESSION", "NO"), new XAttribute("RESPONSE", "-4"), new XAttribute("NEXTLEVEL", "")));
4

1 に答える 1

2

XPathを使用すると、任意のレベルで要素を使用descendant::INPUT[@VALUE='SLN7DEACTIVATION']/METHODまたは//INPUT[@VALUE='SLN7DEACTIVATION']/METHOD検索できます。したがって、そのような要素が1つしかないことが確実な場合は、その方法でパスを短縮できます。ただし、すべての祖先が要素を識別することが重要である場合は、長いパスを使用してください。

ちなみに、代わりに

String strFile = File.ReadAllText(Server.MapPath("~/SessionAnalyserAccessories.xml"));
XDocument xdoc1 = XDocument.Parse(strFile);

単にする

XDocument xdoc1 = XDocument.Load(Server.MapPath("~/SessionAnalyserAccessories.xml"));

これにより、XMLパーサーは、ドキュメントのXML宣言で正しいエンコードを見つけることができ、最初にすべてのXMLで長い文字列を読み取らないようにすることで、より効率的になります。

于 2012-05-02T11:42:32.187 に答える