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>

上記の 2 つの親ノードの間に子を持つ新しい親を挿入するにはどうすればよいですか? したがって、次のようになります。

<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

リンクの使用

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 に答える