目前我正在使用带有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", "")));
答案 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的冗长字符串,从而提高效率。