如何创建子节点并将其他子节点都包起来?

问题描述 投票:0回答:1

我有这样的东西。

<DataTable>
   <Tests>
       <Test1>1</Test1>
       <Test2>2</Test2>
       <Test3>3</Test3>
    </Tests>
    <Tests>
       <Test1>4</Test1>
       <Test2>5</Test2>
       <Test3>6</Test3>
    </Tests>
</DataTable>

有什么办法可以创建另一个子节点 并把它包在所有其他测试的周围,就像这样。

  <DataTable>
       <WrapChild>
           <Tests>
               <Test1>1</Test1>
               <Test2>2</Test2>
               <Test3>3</Test3>
            </Tests>
       </WrapChild>
       <WrapChild>
            <Tests>
               <Test1>4</Test1>
               <Test2>5</Test2>
               <Test3>6</Test3>
            </Tests>
      </WrapChild>
 </DataTable>

我创建了一个子节点WrapChild 现在有这样的东西

<DataTable>
           <WrapChild/>
           <Tests>
             <Test1>1</Test1>
             <Test2>2</Test2>
             <Test3>3</Test3>
           </Tests>
           <Tests>
             <Test1>4</Test1>
             <Test2>5</Test2>
             <Test3>6</Test3>
           </Tests>
</DataTable>

我创建子元素的代码是:

XmlDocument docForList = new XmlDocument();
XmlElement childElement = docForList.CreateElement("WrapChild");
XmlNode parentNode = docForList.SelectSingleNode("DataTable");
parentNode.InsertBefore(childElement,parentNode.FirstChild);

但我怎么能把它设置成包住所有测试呢?

c# xml
1个回答
0
投票

创建 "WrapChild "元素后,需要将 "Tests "附加到它的子元素中。

输入示例。

<DataTable>
   <Tests>
       <Test1>1</Test1>
       <Test2>2</Test2>
       <Test3>3</Test3>
    </Tests>
    <Tests>
       <Test1>4</Test1>
       <Test2>5</Test2>
       <Test3>6</Test3>
    </Tests>
</DataTable>

代码:

var doc = new XmlDocument();
doc.LoadXml(xml);

var wrap = doc.CreateElement("WrapChild");           
doc.SelectSingleNode("DataTable").AppendChild(wrap);
var nodes = doc.SelectNodes("//Tests");
var nodesCount = nodes.Count;
for(var i=0;i<nodesCount;i++)
    wrap.AppendChild(nodes[i]);

输出:

<DataTable>
    <WrapChild>
        <Tests>
            <Test1>1</Test1>
            <Test2>2</Test2>
            <Test3>3</Test3>
        </Tests>
        <Tests>
            <Test1>4</Test1>
            <Test2>5</Test2>
            <Test3>6</Test3>
        </Tests>
    </WrapChild>
</DataTable>
© www.soinside.com 2019 - 2024. All rights reserved.