Best way to read, modify, and write XML

前端 未结 8 1917
灰色年华
灰色年华 2021-02-05 10:39

My plan is to read in an XML document using my C# program, search for particular entries which I\'d like to change, and then write out the modified document. However, I\'ve bec

相关标签:
8条回答
  • 2021-02-05 11:22

    Here's a tool I wrote to modify an IAR EWARM project (ewp) file, adding a linker define to the project. From the command line, you run it with 2 arguments, the input and output file names (*.ewp).

        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        using System.Xml;
    
        namespace ewp_tool
        {
            class Program
            {
                static void Main(string[] args)
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(args[0]);
    
                    XmlNodeList list = doc.SelectNodes("/project/configuration[name='Debug']/settings[name='ILINK']/data/option[name='IlinkConfigDefines']/state");
                    foreach(XmlElement x in list) {
                        x.InnerText = "MAIN_APP=1";
                    }
    
                    using (XmlTextWriter xtw = new XmlTextWriter(args[1], Encoding.UTF8))
                    {
                        //xtw.Formatting = Formatting.Indented; // leave this out, it breaks EWP!
                        doc.WriteContentTo(xtw);
                    }
                }
            }
        }
    

    The structure of the XML looks like this

        <U+FEFF><?xml version="1.0" encoding="iso-8859-1"?>
        <project>
          <fileVersion>2</fileVersion>
          <configuration>
            <name>Debug</name>
            <toolchain>
              <name>ARM</name>
            </toolchain>
            <debug>1</debug>
    
             ...
    
            <settings>
              <name>ILINK</name>
              <archiveVersion>0</archiveVersion>
              <data>
    
                ...
    
                <option>
                  <name>IlinkConfigDefines</name>
                  <state>MAIN_APP=0</state>
                </option>
    
    0 讨论(0)
  • 2021-02-05 11:25

    Are the documents you are processing relatively small? If so, you could load them into memory using an XmlDocument object, modify it, and write the changes back out.

    XmlDocument doc = new XmlDocument();
    doc.Load("path_to_input_file");
    // Make changes to the document.
    using(XmlTextWriter xtw = new XmlTextWriter("path_to_output_file", Encoding.UTF8)) {
      xtw.Formatting = Formatting.Indented; // optional, if you want it to look nice
      doc.WriteContentTo(xtw);
    }
    

    Depending on the structure of the input XML, this could make your parsing code a bit simpler.

    0 讨论(0)
提交回复
热议问题