【发布时间】:2017-04-21 12:09:42
【问题描述】:
我有这样的xml文件
<?xml version="1.0" encoding="utf-8"?>
<TestSuite name="TestSuite1" UID="0" State="Indeterminate">
<TestCase name="TestCase1" UID="1" State="Indeterminate" DataSourceId="1">
<TestModule name="1" State="Unchecked" UID="1">
</TestModule>
<TestModule name="2" State="Unchecked" UID="2">
</TestModule>
<TestModule name="3" State="Unchecked" UID="3">
</TestModule>
</TestCase>
<TestCase name="TestCase2" UID="33" State="Indeterminate" DataSourceId="1">
<TestModule name="4" State="Unchecked" UID="4">
</TestModule>
<TestModule name="5" State="Unchecked" UID="5">
</TestModule>
<TestModule name="6" State="Unchecked" UID="6">
</TestModule>
</TestCase>
</TestSuite>
我必须将TestModule name="3" 删除到TestModule name="1" 节点的上方或下方。
更新后的文件会是这样的
<?xml version="1.0" encoding="utf-8"?>
<TestSuite name="TestSuite1" UID="0" State="Indeterminate">
<TestCase name="TestCase1" UID="1" State="Indeterminate" DataSourceId="1">
<TestModule name="3" State="Unchecked" UID="4bdb93ca-4f76-4709-ab88-13297def827b">
</TestModule>
<TestModule name="1" State="Unchecked" UID="5aa80bb6-9616-458c-b095-d6a0edbaf95b">
</TestModule>
<TestModule name="2" State="Unchecked" UID="2">
</TestModule>
</TestCase>
</TestSuite>
我已经为此编写了以下代码
XmlDocument xDoc = new XmlDocument();
xDoc.Load(Path.Combine(@"D:\Test Suite\TestSuite.xml"));
///////////////////
XmlNode l_NodeToAppend = null;
foreach (XmlNode i in e.SourceModels)
{
l_NodeToAppend = xDoc.SelectSingleNode(String.Format("//*[@UID='{0}']", ((XmlNode)i).Attributes["UID"].Value));//1
if (l_NodeToAppend != null)
break;
}
XmlNode l_targteNode = xDoc.SelectSingleNode(String.Format("//*[@UID='{0}']", ((XmlNode)e.TargetModel).Attributes["UID"].Value));//3
bool flag = false;
l_NodeToAppend.InsertBefore(l_NodeToAppend, l_targteNode);
它给出错误“无法插入节点或该节点的任何祖先作为其自身的子节点。”
【问题讨论】:
-
每个
TestCase节点中的最后一个TestModule节点必须是第一个节点吗? -
应该在运行时决定哪个节点是第一个或最后一个用户将决定
标签: c# xml xml-parsing