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查找任何级别的元素,因此如果您确定只有一个这样的元素,您可以通过这种方式缩短路径。但是,如果所有祖先都对识别元素很重要,则使用长路径。

在旁注中,而不是

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 回答