代码改变世界

XML文件带有命名空间读取所有节点

2016-11-23 09:45  Moon-明月  阅读(570)  评论(0)    收藏  举报
//批量处理节点结构不一样的XML,获取最终节点的并集,建立模型,进行入库操作。
private
void button1_Click(object sender, EventArgs e) { FileList = GetAllFiles(new System.IO.DirectoryInfo(@"C:\Users\PC_YUE\Desktop\测试XML")); for (int i = 0; i < FileList.Count; i++) { //使用XmlDocument读取XML XmlDocument xdoc = new XmlDocument(); //相对路径 xdoc.Load(@FileList[i].FilePath); //第一个节点 XmlNode xnode = xdoc.DocumentElement.FirstChild; XmlNode root = xdoc.DocumentElement; XmlNamespaceManager nsp = new XmlNamespaceManager(xdoc.NameTable); nsp.AddNamespace("xocs", "http://www.elsevier.com/xml/xocs/dtd"); XmlNodeList a = root.SelectNodes("child::xocs:meta", nsp); XmlNodeList xnlist = a[0].ChildNodes; foreach (XmlNode el in xnlist) { nodeList.Add(el.Name); } i++; } var list = nodeList.Distinct<string>().ToList(); for (int j = 0; j < list.Count; j++) { ListViewItem lvi = new ListViewItem(j.ToString()); lvi.SubItems.Add(list[j]); listView1.Items.Add(lvi); } } /// <summary> /// 定义Xml模型-文件所在路径和文件名 /// </summary> public class FileInformation { public string FileName { get; set; } public string FilePath { get; set; } } static List<FileInformation> FileList = new List<FileInformation>(); public static List<FileInformation> GetAllFiles(DirectoryInfo dir) { FileInfo[] allFile = dir.GetFiles(); foreach (FileInfo fi in allFile) { FileList.Add(new FileInformation { FileName = fi.Name, FilePath = fi.FullName }); } DirectoryInfo[] allDir = dir.GetDirectories(); foreach (DirectoryInfo d in allDir) { GetAllFiles(d); } return FileList; } List<string> nodeList = new List<string>();