将两个不同格式的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("对照模板已存在!"); } } }}
效果如下
- 将两个不同格式的XML文件,进行节点对照,并生成一个用于对照功能的XML
- java 将xml格式的文本生成xml文件,并获取xml中指定节点的内容
- java生成固定格式的XML文件,用于报表
- 将一个字符串转化xml格式并写到根节点下
- C#之XML基础 获取一个现有的xml文件的根节点并将其名字打印到控制台
- ThinkPHP生成xml格式并导出此xml格式的文件(批量导出)
- Android利用dimens.xml进行适配,使用代码生成不同的dimens.xml文件
- Android利用dimens.xml进行适配,使用代码生成不同的dimens.xml文件
- Android利用dimens.xml进行适配,使用代码生成不同的dimens.xml文件
- Java读取一个xml文件并生成相应的类
- Java中读取XML文件,生成XML格式的字符串并解析这个字符串
- 将某一目录下的所有相同格式的 XML文件绑定到不同的DataGrid
- 将某一目录下的所有相同格式的 XML文件绑定到不同的DataGrid
- 将某一目录下的所有相同格式的 XML文件绑定到不同的DataGrid
- 将某一目录下的所有相同格式的 XML文件绑定到不同的DataGrid
- 将某一目录下的所有相同格式的 XML文件绑定到不同的DataGrid
- 将某一目录下的所有相同格式的 XML文件绑定到不同的DataGrid
- 将某一目录下的所有相同格式的 XML文件绑定到不同的Da
- Create Parent-Child Dimension with SSAS
- android MinSdkVersion, targetSdkVersion, target API level的区别 .
- WPF(4)----Grid控件实现六方格
- 黑马程序员-------(高新技术)枚举
- H264相关知识自总结
- 将两个不同格式的XML文件,进行节点对照,并生成一个用于对照功能的XML
- Android的WebView控件载入网页显示速度慢的究极解决方案
- 黑马程序员--.NET笔记--多线程
- GP服务的输入输出参数数据类型
- 开源项目goagent
- 黑马程序员-------(高新技术)反射
- @synthesize obj=_obj的意义详解 @property和@synthesize
- Git版本管理工具的使用
- VMware的日常问题收集