我有一个XML文件,希望将其中的一些节点提取到一个新的XML文件中并保存
<?xml version="1.0" encoding="utf-8"?>
<files version="2.1.8" Dir="D:TestExm_2" modified="2016-03-18 23:14:58Z" user="Test" language="en">
<file name="1">
<file name="4">
<file name="9">
</file>
</file>
</file>
<file name="2">
</file>
<test name="3">
<test name="5">
<test name="7">
</test>
</test>
</test>
</files>
我的目的是保存这个XML文件的一些特殊节点(这里是测试节点)。这样做的目的是保存附带的根属性。我的意思是,如果我想将节点test
保存在一个新文件中,我想将根属性作为原始XML文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<files version="2.1.8" Dir="D:TestExm_2" modified="2016-03-18 23:14:58Z" user="Test" language="en">
<tests>
<test name="3">
<test name="5">
<test name="7">
</test>
</test>
</test>
</tests>
</files>
但我没能保存它的属性。我保存第二个XML文件的代码是
public void Creat_Steps(string xmlfile, string FileName)
{
XElement doc = XElement.Load(xmlfile);
var item = doc.XPathSelectElement("//test");
XElement newDoc = new XElement("files", new XElement("tests", item));
XElement Docc = new XElement("files", item);
Docc.Save(FileName + ".xml");
}
但这段代码只创建了一个名为files
的根节点,没有任何属性。我必须在新的XML文件中使用该属性,然后就没有了。有什么想法吗?
提前感谢!
最简单的方法就是替换根元素的子节点:
var root = XElement.Load(xmlFile);
root.ReplaceNodes(new XElement("tests", root.Elements("test")));
root.Save(FileName + ".xml");
注意这里也不需要XPath:)还要注意,我使用的是Elements
而不是Descendants
,否则每个test
元素都将成为tests
的新直属子元素,这不是您想要的。
我个人建议使用XDocument
来加载和保存文档,因为这清楚地表明了你的意图。顺便说一句,那时你会使用
var doc = XDocument.Load(xmlFile);
doc.Root.ReplaceNodes(...);
doc.Save(...);