C# XML保留结构

C# XML保留结构,c#,xml,C#,Xml,我正在处理一个XML文件,原始文件有很多注释,例如: <!-- Type: This is a comment--> 现在,当我试图修改此文件并将其保存回时,文件中的注释已被删除,因为我最初阅读时没有注释。但如果我要投入生产,要求是在文件中保留原始评论。最好的方法是什么 现在我可以传入两个引用,一个带注释,一个不带注释,在不带注释的XML上执行操作,并在带注释的XML上修改引用。还有其他想法吗 编辑 <Node1 someattribute> <childno

我正在处理一个XML文件,原始文件有很多注释,例如:

<!-- Type: This is a comment-->
现在,当我试图修改此文件并将其保存回时,文件中的注释已被删除,因为我最初阅读时没有注释。但如果我要投入生产,要求是在文件中保留原始评论。最好的方法是什么

现在我可以传入两个引用,一个带注释,一个不带注释,在不带注释的XML上执行操作,并在带注释的XML上修改引用。还有其他想法吗

编辑

<Node1 someattribute>
  <childnode someattr1="value1" someattr2="Food" />
</Node1
<!-- Type: This is a comment1-->
<!-- Type: This is a comment2-->
<!-- Type: This is a comment3-->
<Node2 someattribute>
    <childnode someattr1="value1" someattr2="Book" />
</Node2>
<!-- Type: This is a comment1-->
<!-- Type: This is a comment2-->
<!-- Type: This is a comment3-->

因此,通过这种方式,我可以直接跳到下一个节点,也可以跳到上一个节点(如果需要)

您可以尝试以下方法:

            XmlReader reader = XmlReader.Create("old.xml");
        XmlWriter writer = XmlWriter.Create("new.xml");

        while (reader.Read())
        {
            if (reader.NodeType != XmlNodeType.Comment)
            {
                // Do your stuff here!
            }

            writer.WriteNode(reader, true);
        }

        writer.Close();
        reader.Close();

为什么不带注释读入文档,然后用注释处理文档呢?这需要额外的编码,当我做下一个签名时,我必须始终测试它是否是注释,所以尽量避免额外的编码。将此作为我的最后一个选项。不要直接使用
XmlReader
。99%的时间不应该直接使用它——它是更高级工具的基础。改为使用
XDocument
。无论如何,它都需要额外的代码。检查注释,或在处理后重新插入注释。第一种情况可能是最不复杂的。NextSibling是错误的方法,因为您还应该测试元素名。使用Select和xpath查询查找需要更改的元素。
node.PreviousSibling;
node.NextSibling;
            XmlReader reader = XmlReader.Create("old.xml");
        XmlWriter writer = XmlWriter.Create("new.xml");

        while (reader.Read())
        {
            if (reader.NodeType != XmlNodeType.Comment)
            {
                // Do your stuff here!
            }

            writer.WriteNode(reader, true);
        }

        writer.Close();
        reader.Close();