首页 > 解决方案 > 如何在所有其他子节点周围创建和包装子节点?

问题描述

我有这样的事情:

<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

解决方案


创建“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>

推荐阅读