解决方案 »

  1.   

    用XmlDocument,百度一下c#xml读写方法很多的。你的xml应该是<SYS_NO>1</SYS_NO>吧。            XmlDocument xml = new XmlDocument();
                xml.Load(xmlpath);//加载xml文件,xmlpath为xml文件的路径
                XmlNodeList keys = xml.SelectSingleNode("PARA").ChildNodes;
                XmlElement root = xml.CreateElement("PARA");//创建根节点
                XmlDocument new_xml = new XmlDocument();
                foreach (XmlElement key in keys)//遍历key节点(ROW)
                {
                    XmlNodeList nodes = key.ChildNodes;
                    foreach (XmlElement node in nodes)//遍历key节点下的子节点(COL)
                    {
                        root.AppendChild(node);//SYS_NO
                    }
                }
                new_xml.AppendChild(root);
                xml.Save(xmlpath);//覆盖保存回xml
      

  2.   

    额,最后那个xml.Save(xmlpath);//覆盖保存回xml写错了,应该是new_xml.Save(xmlpath);//覆盖保存回xml。
    还有这个我没测试,大概就是这个意思
      

  3.   

    感谢的你回复!!!
    断点跟到new_xml.AppendChild(root);这段就报错了,能不能辛苦下帮我测试下。
    错误提示是:
    未处理的“System.ArgumentException”类型的异常出现在 system.xml.dll 中。
    其他信息: 要插入的节点出自不同的文档上下文。
    //////////////////////////////////////////////////////////////////////////////////////////////////////遍历子节点COL的时候快速监视好像只有PARA
      

  4.   

    Quote: 引用 3 楼 huang369509940 的回复:

    Quote: 引用 2 楼 huang369509940 的回复:

    然后将SYS_NO提取到new_xml,思路应该是对的,正在找问题出在哪
      

  5.   

    先问一下啊 你<SYS_NO>只会有一个还是会有多个?
      

  6.   

    额 现在这个测试没有问题了            string xmlpath = @"F:\Testt\Test\Test\XMLFile1.xml";
                XmlDocument xml = new XmlDocument();
                xml.Load(xmlpath);//加载xml文件,xmlpath为xml文件的路径
                XmlNodeList keys = xml.SelectSingleNode("PARA").ChildNodes;
                XmlDocument new_xml = new XmlDocument();
                XmlElement root = new_xml.CreateElement("PARA");//创建根节点
                foreach (XmlElement key in keys)//遍历key节点(ROW)
                {
                    XmlNodeList nodes = key.ChildNodes;
                    foreach (XmlElement node in nodes)//遍历key节点下的子节点(COL)
                    {
                        XmlElement n = new_xml.CreateElement("SYS_NO");
                        n.InnerText = node.InnerText;
                        root.AppendChild(n);//SYS_NO
                    }
                }
                new_xml.AppendChild(root);
                new_xml.Save(xmlpath);//覆盖保存回xml
      

  7.   


    目前我测试传的是一个参数,如果在现场的话是传多个参数!整体结构大概是这样(如下):
    <?xml version="1.0" encoding="utf-8"?>
    <PARA>
    <ROW>
    <COL>
    <SYS_NO>1<SYS_NO>
    <DETECT_TASK_NO>123</DETECT_TASK_NO>
    <BAR_CODE>456</BAR_CODE>
    </COL>
    </ROW>
    </PARA>
    ////////////////////////////////////////////////////////
    都是在<COL></COL>里面
      

  8.   


    目前我测试传的是一个参数,如果在现场的话是传多个参数!整体结构大概是这样(如下):
    <?xml version="1.0" encoding="utf-8"?>
    <PARA>
    <ROW>
    <COL>
    <SYS_NO>1<SYS_NO>
    <DETECT_TASK_NO>123</DETECT_TASK_NO>
    <BAR_CODE>456</BAR_CODE>
    </COL>
    </ROW>
    </PARA>
    ////////////////////////////////////////////////////////
    都是在<COL></COL>里面
    看这个样子是<SYS_NO>只会出现一次哈,那这个就没问题了。XmlDocument xml = new XmlDocument();
                xml.Load(xmlpath);//加载xml文件,xmlpath为xml文件的路径
                XmlNodeList keys = xml.SelectSingleNode("PARA").ChildNodes;
                XmlDocument new_xml = new XmlDocument();
                XmlElement root = new_xml.CreateElement("PARA");//创建根节点
                foreach (XmlElement key in keys)//遍历key节点(ROW)
                {
                    XmlNodeList nodes = key.ChildNodes;
                    foreach (XmlElement node in nodes)//遍历key节点下的子节点(COL)
                    {
                        XmlElement n = new_xml.CreateElement(node.Name);//就是把ROW和COL都删了,<SYS_NO><DETECT_TASK_NO><BAR_CODE>都保留
                        n.InnerText = node.InnerText;
                        root.AppendChild(n);
                    }
                }
                new_xml.AppendChild(root);
                new_xml.Save(xmlpath);//覆盖保存回xml
      

  9.   

    额 刚才那个还是有问题 这个测试了没问题 = =XmlDocument xml = new XmlDocument();
                xml.Load(xmlpath);//加载xml文件,xmlpath为xml文件的路径
                XmlNodeList keys = xml.SelectSingleNode("PARA").ChildNodes;
                XmlDocument new_xml = new XmlDocument();
                XmlElement root = new_xml.CreateElement("PARA");//创建根节点
                foreach (XmlElement key in keys)//遍历key节点(ROW)
                {
                    XmlNodeList nodes = key.ChildNodes;
                    foreach (XmlElement node in nodes)//遍历key节点下的子节点(COL)
                    {
                        foreach (XmlElement para in node.ChildNodes)
                        {
                            XmlElement n = new_xml.CreateElement(para.Name);//就是把ROW和COL都删了,<SYS_NO><DETECT_TASK_NO><BAR_CODE>都保留
                            n.InnerText = para.InnerText;
                            root.AppendChild(n);
                        }
                        
                    }
                }
                new_xml.AppendChild(root);
                new_xml.Save(xmlpath);//覆盖保存回xml
    <PARA>
      <ROW>
        <COL>
          <SYS_NO>1</SYS_NO>
          <DETECT_TASK_NO>123</DETECT_TASK_NO>
          <BAR_CODE>456</BAR_CODE>
        </COL>
      </ROW>
    </PARA>执行完以后<PARA>
      <SYS_NO>1</SYS_NO>
      <DETECT_TASK_NO>123</DETECT_TASK_NO>
      <BAR_CODE>456</BAR_CODE>
    </PARA>
      

  10.   

    Quote: 引用 12 楼 huang369509940 的回复:

    真心感谢,受益匪浅!!!能加个好友吗!!!(QQ:37109598)