我需要使用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");
答案 0 :(得分:9)
你需要
将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加载的数据结构,它在解析文件时不会在注释中读取。您正在尝试编辑文件本身。