我有这样的东西。
<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);
但我怎么能把它设置成包住所有测试呢?
创建 "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>