如何使用System.XML在C#中注释XML文件的一行

时间:2011-06-13 08:43:42

标签: c# xml

我需要使用System.XML属性评论和取消注释此XML文件的第4行:

<?xml version="1.0" encoding="utf-8"?>
    <configuration>    
        <system.web>
            <customErrors mode="On" defaultRedirect="som_url_here" />
        </system.web>
    </configuration>

期望的输出:

<!-- <customErrors mode="On" defaultRedirect="som_url_here" /> -->

可以在不使用文件阅读器的情况下实现这一目标吗?

节点:

XmlNode xmlNodoCE = docWebConfig.DocumentElement.SelectSingleNode("system.web/customErrors");

3 个答案:

答案 0 :(得分:9)

你需要

  • 将文件加载到XmlDocument中,
  • 检索要评论的节点
  • 创建一个包含原始节点的XML内容的注释节点,
  • 将此评论添加到原始节点
  • 之前的原始父节点
  • 将其从其父级
  • 中删除
  • 将XmlDocument写入文件(同一个文件)。

    String xmlFileName = "Sample.xml";
    
    // Find the proper path to the XML file
    String xmlFilePath = this.Server.MapPath(xmlFileName);
    
    // Create an XmlDocument
    System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument();
    
    // Load the XML file in to the document
    xmlDocument.Load(xmlFilePath);
    
    // Get the target node using XPath
    System.Xml.XmlNode elementToComment = xmlDocument.SelectSingleNode("/configuration/system.web/customErrors");
    
    // Get the XML content of the target node
    String commentContents = elementToComment.OuterXml;
    
    // Create a new comment node
    // Its contents are the XML content of target node
    System.Xml.XmlComment commentNode = xmlDocument.CreateComment(commentContents);
    
    // Get a reference to the parent of the target node
    System.Xml.XmlNode parentNode = elementToComment.ParentNode;
    
    // Replace the target node with the comment
    parentNode.ReplaceChild(commentNode, elementToComment);
    
    xmlDocument.Save(xmlFilePath);
    

答案 1 :(得分:4)

这应该可以解决问题。它是一个控制台应用程序,但原理完全相同。它确实假设一个名为“web.config”的文件与exe:

位于同一个文件夹中
using System;
using System.Xml;

namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            var document = new XmlDocument();
            document.Load("web.config");

            var element = document.SelectSingleNode("//compilation[@defaultLanguage = 'c#' and @debug = 'true']");

            var comment = document.CreateComment(element.OuterXml);

            element.ParentNode.ReplaceChild(comment, element);

            document.Save("web.config2");

            var document2 = new XmlDocument();
            document2.Load("web.config2");

            var comment2 = document2.SelectSingleNode("//system.web/comment()");
            var newNode = document2.CreateDocumentFragment();
            newNode.InnerXml = comment2.InnerText;
            comment2.ParentNode.ReplaceChild(newNode, comment2);
            document2.Save("web.config3");

            Console.ReadKey();
        }
    }
}

它保存到不同的文件以显示xml的进展,显然,您只想保存回原始文件。

编辑:自从我编写答案后你改变了xml,但是如果你改变了xpath那么它应该完全相同。

答案 2 :(得分:-2)

这里的问题是XmlDocument是XML加载的数据结构,它在解析文件时不会在注释中读取。您正在尝试编辑文件本身。