将两个不同格式的XML文件,进行节点对照,并生成一个用于对照功能的XML

来源:互联网 发布:免费的网络摄像头社区 编辑:程序博客网 时间:2024/05/22 18:46

经常有的需求是,需要将一种格式的XML转换成另一种XML。如果要实现这个功能首先需要将两个不同XML手动建立节点对照关系。然后存成XML或者数据文件。

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Xml;using System.Collections;using System.Windows;using System.IO;namespace XML_Dom{    public partial class Form2 : Form    {        private XmlDocument document;//xml文档对象        private XmlNode newNode;        private XmlAttribute newAttri;        private XmlElement newElement;        string systemPath;        int ncNum = 0;        public Form2()        {            InitializeComponent();            Form_Load();        }        private void Form2_Load(object sender, EventArgs e)        {        }        //加载XML文件        private void LoadStuXml(string xml)        {            document = new XmlDocument();            document.Load(xml);//加载xml文档        }               ArrayList newList = new ArrayList();        private void TraverseTextNodeInnerText(XmlNode node)        {            if (node.HasChildNodes)            {                XmlNodeList nodeList = node.ChildNodes;                foreach (XmlNode nd in nodeList)                {                    //if (nd.NodeType == XmlNodeType.Text)                    if (nd.NodeType == XmlNodeType.Element)//去掉注释节点                    {                        //newList.Add(nd.InnerText);//获得节点值                        newList.Add(nd.Name);//获得节点名称                    }                    TraverseTextNodeInnerText(nd);                }            }        }        public void GetAllTextNodeInnerText(string node, int x, int y, string s)        {            //XmlDocument doc = XMLLoad();            XmlNode nd = document.SelectSingleNode(node);            TraverseTextNodeInnerText(nd);            //return this._TextNodeInnerTexts.ToArray();            //int x = 10;            //int y = 0;                      if (s == "textbox")            {                ncNum = newList.Count;                this.panel1.AutoScroll = true;                for (int i = 0; i < newList.Count; i++)                {                    y += 40;                    TextBox tb = new TextBox();                    tb.Location = new Point(x, y);                    tb.Name = "tb" + i.ToString();                    tb.Text = newList[i].ToString();                    //this.Controls.Add(tb);                    this.panel1.Controls.Add(tb);                    Label lb = new Label();                    lb.Name="lb"+ i.ToString();                    lb.Location = new Point(x-25, y);                    lb.Text = i.ToString();                    this.panel1.Controls.Add(lb);                }            }            if (s == "dropdownlist")            {                this.panel2.AutoScroll = true;                for (int i = 0; i < ncNum; i++)                {                    y += 40;                    ComboBox cb = new ComboBox();                    cb.Location = new Point(x, y);                    cb.Name = "cb" + i.ToString();                    for (int j = 0; j < newList.Count; j++)                    {                        cb.Items.Add(newList[j].ToString());                    }                    //this.Controls.Add(cb);                    this.panel2.Controls.Add(cb);                    Label lb = new Label();                    lb.Name = "dlb" + i.ToString();                    lb.Location = new Point(x - 25, y);                    lb.Text = i.ToString();                    this.panel2.Controls.Add(lb);                }            }        }        private void button1_Click(object sender, EventArgs e)        {            // Create an instance of the open file dialog box.            OpenFileDialog openFileDialog1 = new OpenFileDialog();            // Set filter options and filter index.            openFileDialog1.Filter = "Text Files (.xml)|*.xml|All Files (*.*)|*.*";            openFileDialog1.FilterIndex = 1;            openFileDialog1.Multiselect = true;            // Process input if the user clicked OK.            if (openFileDialog1.ShowDialog() == DialogResult.OK)            {                newList.Clear();                systemPath = openFileDialog1.FileName;                tbPath.Text = systemPath;                             LoadStuXml(systemPath);//打开NC模板文档                GetAllTextNodeInnerText("ufinterface", 60, 10, "dropdownlist");            }        }        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)        {            if (comboBox1.Text == "应付单")           {               checkFile("../DuizhaoXML/"+comboBox1.Text + "对照表" + ".xml");               LoadStuXml("../DemoXML/nc.xml");//打开NC模板文档               GetAllTextNodeInnerText("ufinterface", 50, 10, "textbox");           }           if (comboBox1.SelectedText.ToString() == "应收单")           {           }        }        private void btnSave_Click(object sender, EventArgs e)        {            createNewXML();        }        private void createNewXML()        {            //int txtNum = panel1.Controls.Count;//xml节点个数            //for(int i=0;i<txtNum;i++)            //{            //  //string t= this.Controls["tb"+i].Text;            //  if (panel1.Controls[i].Name == "tb" + i)            //    {               //        //return i;            //        string t = panel1.Controls[i].Text;            //    }            //}            try            {                XmlTextWriter xmlWriter;                string strFilename = "../duizhaoXML/" + comboBox1.Text + "对照表" + ".xml";                xmlWriter = new XmlTextWriter(strFilename, Encoding.Default);//创建一个xml文档                xmlWriter.Formatting = Formatting.Indented;                xmlWriter.WriteStartDocument();                xmlWriter.WriteStartElement("Node");                //int txtNum = panel1.Controls.Count;//xml节点个数                int txtNum = ncNum;                for (int i = 0; i < txtNum; i++)                {                    //string t= this.Controls["tb"+i].Text;                    //if (panel1.Controls["tb"+i].Name == "tb" + i.ToString())                    //{                                               string t = panel1.Controls["tb"+i].Text;//NC模板节点                        xmlWriter.WriteStartElement(t);                        xmlWriter.WriteString( panel2.Controls["cb"+i].Text);//外部系统对应节点                        xmlWriter.WriteEndElement();                    //}                }                xmlWriter.WriteEndElement();                xmlWriter.Flush();                   xmlWriter.Close();            }            catch (Exception e)            {                MessageBox.Show(e.ToString());            }                       MessageBox.Show("创建成功!");        }        private void checkFile(string path)        {            FileInfo TheFile = new FileInfo(path);            if (TheFile.Exists)            {                MessageBox.Show("对照模板已存在!");            }        }            }}

效果如下


原创粉丝点击