【问题标题】:Modify XML existing content in C#在 C# 中修改 XML 现有内容
【发布时间】:2011-02-02 19:47:54
【问题描述】:

目的:我打算用 XmlTextWriter 创建一个 XML 文件,并用 XmlNode SelectSingleNode()、node.ChildNode[?].InnerText = someting 等修改/更新一些现有内容。

在我使用 XmlTextWriter 创建 XML 文件后,如下所示。

XmlTextWriter textWriter = new XmlTextWriter("D:\\learning\\cs\\myTest.xml", System.Text.Encoding.UTF8);

我练习了下面的代码。但未能保存我的 XML 文件。

XmlDocument doc = new XmlDocument();
doc.Load("D:\\learning\\cs\\myTest.xml");

XmlNode root = doc.DocumentElement;
XmlNode myNode;

myNode= root.SelectSingleNode("descendant::books");

....

textWriter.Close();

doc.Save("D:\\learning\\cs\\myTest.xml");  

我发现按我的方式生产不好。 有什么建议吗? 我不清楚同一个项目中 XmlTextWriter 和 XmlNode 的概念和用法。 感谢您的阅读和回复。

【问题讨论】:

  • 您要检索哪个节点?你能发布一些你正在使用的xml吗?我不知道 descendant::books xpath 语法。你也不需要 XmlTextWriter,只需要 XmlDocument

标签: c# xml xmlnode xmltextwriter


【解决方案1】:

XmlTextWriter 通常用于生成(而不是更新)XML 内容。当您将 xml 文件加载到 XmlDocument 中时,您不需要单独的编写器。

只需更新您选择的节点并 .Save() 该 XmlDocument。

【讨论】:

    【解决方案2】:

    好吧,如果你想用 XML 更新一个节点,XmlDocument 很好 - 你不需要使用XmlTextWriter

    XmlDocument doc = new XmlDocument();
    doc.Load("D:\\build.xml");
    XmlNode root = doc.DocumentElement;
    XmlNode myNode = root.SelectSingleNode("descendant::books");
    myNode.Value = "blabla";
    doc.Save("D:\\build.xml");
    

    【讨论】:

      【解决方案3】:

      形成一个 XML 文件

      XmlTextWriter xmlw = new XmlTextWriter(@"C:\WINDOWS\Temp\exm.xml",System.Text.Encoding.UTF8);
      xmlw.WriteStartDocument();            
      xmlw.WriteStartElement("examtimes");
      xmlw.WriteStartElement("Starttime");
      xmlw.WriteString(DateTime.Now.AddHours(0).ToString());
      xmlw.WriteEndElement();
      xmlw.WriteStartElement("Changetime");
      xmlw.WriteString(DateTime.Now.AddHours(0).ToString());
      xmlw.WriteEndElement();
      xmlw.WriteStartElement("Endtime");
      xmlw.WriteString(DateTime.Now.AddHours(1).ToString());
      xmlw.WriteEndElement();
      xmlw.WriteEndElement();
      xmlw.WriteEndDocument();  
      xmlw.Close();           
      

      要编辑 Xml 节点,请使用以下代码

      XmlDocument doc = new XmlDocument(); 
      doc.Load(@"C:\WINDOWS\Temp\exm.xml"); 
      XmlNode root = doc.DocumentElement["Starttime"]; 
      root.FirstChild.InnerText = "First"; 
      XmlNode root1 = doc.DocumentElement["Changetime"]; 
      root1.FirstChild.InnerText = "Second"; 
      doc.Save(@"C:\WINDOWS\Temp\exm.xml"); 
      

      试试这个。这是 C# 代码。

      【讨论】:

        【解决方案4】:

        如果您使用的是框架 3.5,则使用 LINQ to xml

        using System.Xml.Linq;
        
        XDocument xmlFile = XDocument.Load("books.xml"); 
        var query = from c in xmlFile.Elements("catalog").Elements("book")    
                    select c; 
        foreach (XElement book in query) 
        {
            book.Attribute("attr1").Value = "MyNewValue";
        }
        xmlFile.Save("books.xml");
        

        【讨论】:

          猜你喜欢
          • 2023-03-03
          • 2014-03-24
          • 1970-01-01
          • 1970-01-01
          • 2012-01-23
          • 1970-01-01
          • 1970-01-01
          • 2014-08-03
          • 1970-01-01
          相关资源
          最近更新 更多