【问题标题】:access only parent node attribute without having children仅访问父节点属性而没有子节点
【发布时间】:2016-03-29 09:39:59
【问题描述】:

我有一个 XML 文件,想将其中的一些节点提取到一个新的 XML 文件中并保存。 XML文件如下:

<?xml version="1.0" encoding="utf-8"?>
<files version="2.1.8" Dir="D:Test\Exm_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 保存在一个新文件中,我希望将 root 属性作为原始 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<files version="2.1.8" Dir="D:Test\Exm_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 文件中使用该属性,然后没有它。有什么想法吗?

提前致谢!

【问题讨论】:

  • 请修正您的示例 XML - 它目前无效,因为您没有足够的结束文件元素。不清楚这是因为 &lt;file name="4"&gt; 应该是 &lt;file name="4" /&gt; 还是名称 9 应该在名称 4 内,但如果 XML 开始有效,则更容易为您提供帮助。我们不需要自己修复它来测试。
  • 感谢您的评论。我做到了!

标签: c# .net xml winforms nodes


【解决方案1】:

最简单的方法就是替换根元素的子节点:

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(...);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 2019-03-08
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多