2
<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 将告诉我要在其父级上方插入哪个子级....对此的任何帮助将不胜感激。

4

2 回答 2

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);
}
于 2012-11-16T06:30:35.310 回答
1

使用 LINQ

Node在特定 Node( insert after a1)之后插入 a

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 之前对其进行更正。

于 2012-11-16T06:44:08.120 回答