关于XML的格式问题

根据客户的需求,我做出来的是这样的

img


但实际客户想要的是这样的,怎么才能做出来这样的,标红的部分是区别

img

        private void button4_Click(object sender, EventArgs e)
        {
            int n = dataGridView1.Rows.Count;
            string para1="";
            try
            {
                XmlDocument pXmlDocument = new XmlDocument();
                XmlDeclaration pXmlDeclaration = pXmlDocument.CreateXmlDeclaration("1.0", "gb2312", null);
                pXmlDocument.AppendChild(pXmlDeclaration);
                //加入一个根元素
                XmlElement pElement = pXmlDocument.CreateElement("", "root", "");
                pXmlDocument.AppendChild(pElement);

                XmlNode pXmlRootNode = pXmlDocument.SelectSingleNode("root");//拿到根元素

                //添加要素
                XmlElement pXmlRootElement = pXmlDocument.CreateElement("Title");
                XmlElement pXmlElement = pXmlDocument.CreateElement("DataModelCode");
                pXmlElement.InnerText = "DMXXXX";
                XmlElement pXmlElement1 = pXmlDocument.CreateElement("Version");
                pXmlElement1.InnerText = "1.00";

                XmlElement pXmlRootElement1 = pXmlDocument.CreateElement("MeasureContent");
                XmlElement pXmlElement2 = pXmlDocument.CreateElement("MeasuringItem");
                for (int i = 0; i < n-1; i++)
                {
                    para1 = para1 + "<item Code=\"" + dataGridView1.Rows[i].Cells[0].Value.ToString() + "\" " +
                                    "Name=\"" + dataGridView1.Rows[i].Cells[1].Value.ToString() + "\" " +
                                    "Value=\"" + dataGridView1.Rows[i].Cells[2].Value.ToString() + "\" />" + "\r\n";
                }

                para1 = "<Item Code=\"JOBNAME\" Name=\"生产指令号\" Value=\"\">" + "\r\n" +
                        "<Item Code=\"SYSB\" Name=\"试验设备\" Value=\"\">" + "\r\n" + para1;

                pXmlElement2.InnerText = para1;

                pXmlRootElement.AppendChild(pXmlElement);
                pXmlRootElement.AppendChild(pXmlElement1);

                pXmlRootElement1.AppendChild(pXmlElement2);

                pXmlRootNode.AppendChild(pXmlRootElement);
                pXmlRootNode.AppendChild(pXmlRootElement1);
                pXmlDocument.Save("C:\\Users\\Administrator\\Desktop\\##测试程序\\datagridview操作\\test\\bin\\XML.xml");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "提示");
            }
        }

使用

<![CDATA[content]]> 

还有 innerXml 可以保留内容,但是保存 文件后需要用文本替换将外面的包装去掉

para1 = "<![CDATA[<hello >]]>";
pXmlElement2.InnerXml = para1;

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/1108656
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:使用反射技术,实现XML与对象相互转换(自己封装的超类,相互学习)
  • 除此之外, 这篇博客: 微信小程序支付 中遇到的坑,请绕行中的 2.从微信官方我们可以看到 微信需要的参数是xml格式的数据,因此第一步我们就需要一个将参数从实体转换为xml格式的工具类:方法的代码如下: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •  

    package cn.com.webi.paycommon.base.javabase.util;
    
    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.io.xml.DomDriver;
    import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder;
    
    /**
     * Title: XstreamUtil<br>
     * Description: XstreamUtil<br>
     * Company:</br>
     * CreateDate:2019年01月30日 10:14
     *
     * @author james.fxy
     */
    public class XstreamUtil {
      /**
       * Title: 对象转换为xml<br>
       * Description: objectToXml<br>
       * CreateDate: 2019/1/30 10:16<br>
       *
       * @category 对象转换为xml
       * @author james.fxy
       * @param obj
       * @return java.lang.String
       * @exception Exception
       */
      public static String objectToXml(Object obj) {
        /**
         * 双下划线转为单下划线
         */
        XStream xStream = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("-_", "_")));
    
        // xstream使用注解转换
        xStream.alias("xml", obj.getClass());
        // 去除属性
        xStream.autodetectAnnotations(true);
        xStream.processAnnotations(obj.getClass());
    
        return xStream.toXML(obj);
    
      }
    
      /**
       * Title: xml转换为对象<br>
       * Description: xmlToObject<br>
       * CreateDate: 2019/1/30 10:16<br>
       *
       * @category xml转换为对象
       * @author james.fxy
       * @param xml
       *          * @param cls
       * @return T
       * @exception Exception
       */
      public static <T> T xmlToObject(String xml, Class<T> cls) {
    
        XStream xstream = new XStream(new DomDriver());
        xstream.alias("xml", cls);
        // xstream使用注解转换
        xstream.processAnnotations(cls);
        // 去除属性
        xstream.autodetectAnnotations(true);
        return (T) xstream.fromXML(xml);
    
      }
    }
    
  • 您还可以看一下 李兴华老师的XML编程课程中的 XML其它定义要求小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    首先,根据客户需求,我们需要修改XML文件中的特定部分。根据参考资料的示例代码,我们可以使用Dom4j解析器来读取和修改XML文件。

    步骤1:读取XML文件

    // 创建解析器对象
    SAXReader saxReader = new SAXReader();
    
    // 使用解析器读取XML文档生成Document对象
    Document document = saxReader.read(new File("path/to/your/xml/file.xml"));
    

    这里将路径替换为你实际的XML文件路径。

    步骤2:定位到需要修改的元素 根据XML结构,找到需要修改的部分。假设我们需要修改第一个book的name为"修罗武神",我们可以使用元素的名称和属性值来定位到该元素。

    // 获取根元素
    Element rootElement = document.getRootElement();
    
    // 根据元素名称获取指定元素有多个的话就获取第一个
    Element book = rootElement.element("book");
    
    // 根据元素的属性值获取指定元素
    Element book1 = rootElement.elementByID("001");
    

    请注意,这里"001"是我们假设的book元素的id属性值,根据实际情况修改。

    步骤3:修改元素的内容 使用元素的方法来修改元素的内容。

    // 修改第一个book元素下的name子元素的文本值
    Element nameElement = book.element("name");
    nameElement.setText("修罗武神");
    

    步骤4:保存修改后的XML文件

    // 创建输出流
    Writer writer = new FileWriter("path/to/your/modified/xml/file.xml");
    
    // 创建格式化器
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("UTF-8");
    
    // 创建XMLWriter对象
    XMLWriter xmlWriter = new XMLWriter(writer, format);
    
    // 写入修改后的Document对象
    xmlWriter.write(document);
    
    // 关闭资源
    xmlWriter.close();
    writer.close();
    

    将路径替换为你希望保存修改后的XML文件的路径。

    以上是一个基本的步骤来修改XML文件以满足客户需求。请根据实际情况做相应的修改。

    如果你有任何问题或需要进一步的帮助,请随时告诉我。

这段代码是一个按钮的点击事件处理程序,它将DataGridView中的数据保存为一个XML文件。

首先,代码创建了一个XmlDocument对象,并创建了一个根元素"root"。然后,通过循环遍历DataGridView的行,构建一个字符串para1,其中包含了一些XML元素的数据。最后,将这些数据添加到XmlDocument对象中的适当位置。

接下来,代码创建了一些XmlElement对象,并设置它们的InnerText为相应的值。然后,将这些XmlElement对象添加到XmlDocument对象的根元素和子元素中。

最后,代码使用XmlDocument的Save方法将XML文档保存到指定的文件路径。

需要注意的是,代码中使用了一些固定的字符串作为XML元素的名称和值,你可以根据实际需求进行修改。

在try-catch块中,如果发生异常,将显示一个提示框,显示异常信息。

请确保你已经导入了相应的命名空间,并将按钮的Click事件与此方法关联。