<POW>
<PPE>
<UID>a1</UID>
<ppe1Bool></ppe1Bool>
<ppe1>hello</ppe1>
<ppe2Bool></ppe2Bool>
<ppe2></ppe2>
</PPE>
<PPE>
<UID>a3</UID>
<ppe1Bool></ppe1Bool>
<ppe1>goodbye</ppe1>
<ppe2Bool></ppe2Bool>
<ppe2></ppe2>
</PPE>
</PWO>
如何在上面的两个父节点之间插入带有子节点的新父节点? 所以它会写着:
<POW>
<PPE>
<UID>a1</UID>
<ppe1Bool></ppe1Bool>
<ppe1>hello</ppe1>
<ppe2Bool></ppe2Bool>
<ppe2></ppe2>
</PPE>
<PPE>
<UID>a2</UID>
<ppe1Bool></ppe1Bool>
<ppe1>new insert</ppe1>
<ppe2Bool></ppe2Bool>
<ppe2></ppe2>
</PPE>
<PPE>
<UID>a3</UID>
<ppe1Bool></ppe1Bool>
<ppe1>goodbye</ppe1>
<ppe2Bool></ppe2Bool>
<ppe2></ppe2>
</PPE>
</PWO>
我有这个:
public static void insertRowBeforRowPPE(string strSelection, string strFileName)
{
XmlDocument doc = new XmlDocument();
doc.Load(strFileName);
XmlNodeList lstNode = doc.SelectNodes("PWO/PPE");
foreach (XmlNode node in lstNode)
{
if (node["UID"].InnerText == strSelection)
{
//insert code
}
}
doc.Save(strFileName);
}
strSelection会告诉我在父母身上插入什么孩子......对此有任何帮助将不胜感激。
答案 0 :(得分:2)
使用LINQ2XML
public static void insertRowBeforRowPPE(string strSelection, string strFileName)
{
XElement doc=XElement.Load(strFileName);
foreach(XElement elm in doc.Elements("PPE"))
{
if(elm.Element("UID").Value==strSelection)
elm.AddBeforeSelf(new XElement("PPE",new XElement("UID","a2")));
//adds PPE node having UID element with value a2 just before the required node
}
doc.Save(strFileName);
}
答案 1 :(得分:1)
使用LINQ
在特定节点(Node
)
insert after a1
XDocument xDoc = XDocument.Load("data.xml");
xDoc.Element("POW")
.Elements("PPE").FirstOrDefault(x => x.Element("UID").Value == "a1")
.AddAfterSelf(new XElement("PPE", new XElement("UID", "A")
, new XElement("ppe1Bool")
, new XElement("ppe1", "hello"),
new XElement("ppe2Bool"),
new XElement("ppe2")));
xDoc.Save("mod.xml");
作为旁注,你的xml似乎没有很好的形成,你需要在使用LINQ之前纠正它。