使用LINQ在XML中添加元素的更简单方法

时间:2012-05-02 11:21:35

标签: .net linq-to-xml

目前我正在使用带有linq到xml的xpath来在xml文档中的特定元素之后添加元素。 我担心的是,如果这种层次结构太深,我必须总是提到完整的层次结构? 我不能直接以某种方式给出元素的名称,之后我想添加我的新元素。

在这段代码中,我在谈论这种层次结构: SESSIONANALYSER / AP / MODES / NI / STATEINFORMATION / INIT / INPUT [@ VALUE = 'SLN7DEACTIVATION'] /方法

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", "")));

1 个答案:

答案 0 :(得分:2)

使用XPath,您可以使用descendant::INPUT[@VALUE='SLN7DEACTIVATION']/METHOD//INPUT[@VALUE='SLN7DEACTIVATION']/METHOD来查找任何级别的元素,因此如果您确定只有一个这样的元素可以缩短您的路径。但是,如果所有祖先都能识别元素,那么请使用长路径。

在旁注,而不是

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

简单地做

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

允许XML解析器在文档的XML声明中找到正确的编码,并且不应该首先读入包含所有XML的冗长字符串,从而提高效率。