本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~

经常有的需求是,需要将一种格式的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("对比模板已存在!");
} } }
}
    每日一道理
流逝的日子像一片片凋零的枯叶与花瓣,渐去渐远的是青春的纯情与浪漫。不记得曾有多少雨飘在胸前风响在耳畔,只知道沧桑早已漫进了我的心爬上了我的脸。当一个人与追求同行,便坎坷是伴,磨难也是伴。

效果如下

文章结束给大家分享下程序员的一些笑话语录:

大家喝的是啤酒,这时你入座了。
你给自己倒了杯可乐,这叫低配置。
你给自已倒了杯啤酒,这叫标准配置。
你给自己倒了杯茶水,这茶的颜色还跟啤酒一样,这叫木马。
你给自己倒了杯可乐,还滴了几滴醋,不仅颜色跟啤酒一样,而且不冒热气还有泡泡,这叫超级木马。
你的同事给你倒了杯白酒,这叫推荐配置。
菜过三巡,你就不跟他们客气了。
你向对面的人敬酒,这叫p2p。
你向对面的人敬酒,他回敬你,你又再敬他……,这叫tcp。
你向一桌人挨个敬酒,这叫令牌环。
你说只要是兄弟就干了这杯,这叫广播。
有一个人过来向这桌敬酒,你说不行你先过了我这关,这叫防火墙。
你的小弟们过来敬你酒,这叫一对多。
你是boss,所有人过来敬你酒,这叫服务器。
酒是一样的,可是喝酒的人是不同的。
你越喝脸越红,这叫频繁分配释放资源。
你越喝脸越白,这叫资源不释放。
你已经醉了,却说我还能喝,叫做资源额度不足。
你明明能喝,却说我已经醉了,叫做资源保留。
喝酒喝到最后的结果都一样
你突然跑向厕所,这叫捕获异常。
你在厕所吐了,反而觉得状态不错,这叫清空内存。
你在台面上吐了,觉得很惭愧,这叫程序异常。
你在boss面前吐了,觉得很害怕,这叫系统崩溃。
你吐到了boss身上,只能索性晕倒了,这叫硬件休克。

---------------------------------
原创文章 By
节点和文件
---------------------------------

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

  1. pdmreader支持读取xml格式的pdm文件,无法读取二进制格式的pdm文件。

    您的Pdm数据字典文件可能不被PDMReader读取,可能是因为pdm文件版本的问题.但 您可以通过PowerDesigner12(下载PowerDesigner12)进行转换 后进行读取. 您要做的 ...

  2. C#读取资源文件的两种方法及保存资源文件到本地

    方法1 GetManifestResourceStream   VB.NET中资源的名称为:项目默认命名空间.资源文件名 C#中则是:项目命名空间.资源文件所在文件夹名.资源文件名 例如:istr = ...

  3. C++文件操作(输入输出、格式控制、文件打开模式、测试流状态、二进制读写)

    1.向文件写数据 头文件#include <ofstream> ①Create an instance of ofstream(创建ofstream实例) ②Open the file w ...

  4. 使用 Array2XML把数组转成XML格式,有相同的节点

    最近开发一个项目,需要调用第三方的接口,第三方提供的数据是xml,我直接使用Array2XML把php数组转成XML格式. XML格式如: <root> <body> < ...

  5. Shell 实现找出两个目录下的同名文件方法

    # 首先我们来创建一些 2 个目录,里面的目录结构及相关文件如下所示: # 从上面的测试目录可以看到, lol.txt lol2.txt 两个文件是两个目录下的同名文件 # 有实际例子,思路就容易出来 ...

  6. Python文件的两种用途

    目录 一.Python文件的两种用途 一.Python文件的两种用途 python文件总共有两种用途,一种是执行文件:另一种是被当做模块导入. 编写好的一个python文件可以有两种用途: 脚本,一个 ...

  7. 用dom4j操作xml文件

    XML的全称是eXtensible Markup Language,即“可扩展标记语言”.XML文件的作用主要是数据存储,文件配置,数据传输. html与xml的区别是:①html语法松散,xml语法 ...

  8. MyBatis 入门到精通(二) SQL语句映射XML文件

    MyBatis 真正强大之处就在这些映射语句,也就是它的魔力所在.对于它的强大功能,SQL 映射文件的配置却非常简单. 如果您比较SQL 映射文件配置与JDBC 代码,您很快可以发现,使用SQL 映射 ...

  9. Struts2 | struts.xml文件中使用method属性和通配符简化action标签和Action处理类的编写

    转自:https://www.jianshu.com/p/310e89ee762d 在Struts2框架中,我们知道基本的Action标签只能实现一个url请求对应一个Action处理类.那么我们如果 ...

随机推荐

  1. 省常中模拟 Test1 Day1

    临洮巨人 排序 题意:在字符串中找出 A.B.C 三个字母出现次数相同的区间个数. 初步的解法是前缀和,用 a(i), b(i), c(i) 表示在位置 i 之前(包括 i)各有 字母 A.B.C 多 ...

  2. poj 2773 Happy 2006

    // 题意 :给你两个数 m(10^6),k(10^8) 求第k个和m互质的数是什么这题主要需要知道这样的结论gcd(x,n)=1 <==> gcd(x+n,n)=1证明 假设 gcd(x ...

  3. 浏览器兼容——jquery的html()不兼容IE

    在看着一个页面A,是一个弹出框,用的jquery中的ajax,然后弹出的内容是另一个Div的.而所出现的问题,是在浏览器中都有弹出框,但是只有谷歌和火狐中的弹出框中内容. 当时,我所想到的是另一个问题 ...

  4. String.IsNullOrEmpty 方法

    参数 value:一个String引用 返回值 如果 value 参数为 空引用(在 Visual Basic 中为 Nothing) 或空字符串 (""),则为 true:否则为 ...

  5. 八位彻底改变App Store的iOS开发者

    我们与 app 交互的方式已经被一群聪明的开发者所完全改变,他们的共性是对 app 都有各自独到的见解.下面就是其中最顶尖的八位. Loren Brichter Tweeite 不是 iOS 上第一个 ...

  6. ECshop 二次开发模板教程4

    今天我们学习一下如何在首页调取某个分类的商品:注意了,这里的修改有一些麻烦了哦:首先你需要下载一套新的模板,比如blueksy 上传到模板目录 /themes/ 也就是 /themes/bluesky ...

  7. hdu 1078(dfs记忆化搜索)

    题意:容易理解... 思路:我开始是用dfs剪枝做的,968ms险过的,后来在网上学习了记忆化搜索=深搜形式+dp思想,时间复杂度大大降低,我个人理解,就是从某一个点出发,前面的点是由后面的点求出的, ...

  8. 白盒测试之gtest第一个demo

    认识gtest工具后,关于它的使用,下面将用一个demo程序演示一下gtest的用法以及成果展示. 一.需要测试的C++代码: #include "myfunction.h" // ...

  9. kmeans算法的matlab实践

    把图像中所有的像素点进行RGB聚类分析,然后输出看结果 img = imread('qq.png'); %取出R矩阵,并将这个R矩阵拉成一列 imgR = img(:,:,1); imgR = img ...

  10. bzoj 3218 a + b Problem(最小割+主席树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3218 [题意] 给n个格子涂白或黑色,白则wi,黑则bi的好看度,若黑格i存在: 1& ...