博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#操作XML学习之创建XML文件的同时新建根节点和子节点(多级子节点)
阅读量:5223 次
发布时间:2019-06-14

本文共 6585 字,大约阅读时间需要 21 分钟。

最近工作中遇到一个问题,要求创建一个XML文件,在创建的时候要初始化该XML文档,同时该文档打开后是XML形式,但是后缀名不是。在网上找了好些资料没找到,只能自己试着弄了一下,没想到成功了,把它记下来作为自己的学习笔记。

需求:创建XML文件,后缀名为.xwsp

初始化的文档节点如下:

1 
2
3
4
CreateUser
5
2015/10/1 14:03:48
6
2015/10/1 14:03:48
7
8
9
10
11
View Code

首先第一个问题:后缀名为.xwsp,打开后显示的XML文本

当时这个问题想复杂了,因为要进行二进制转换之类的,网上找了老半天没找到,最后自己试了一下,简单的要死,只能说自己笨

解决方法:xmlDoc.Save("a.xwsp");

只要保存xml文件的时候改了后缀名即可,我也是醉了

 

第二个问题:添加节点的时候尤其是添加<CreatedBy><CreatedTime><SavedTime>这三个节点的时候老是添加不进去

当时写的代码如下:

1 private static void CreateXwspFile(string fileName, string path) 2         { 3             XmlDocument xmlDoc = new XmlDocument(); 4             //创建类型声明节点   5             XmlDeclaration xdDec = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null); 6             xmlDoc.AppendChild(xdDec); 7  8             //创建根节点   9             XmlElement xeRoot = xmlDoc.CreateElement("xxx");10             //给节点属性赋值11             xeRoot.SetAttribute("version", "1.0");12             xeRoot.SetAttribute("name", fileName);13             xmlDoc.AppendChild(xeRoot);14 15             //创建并添加
节点16 xeRoot = xmlDoc.CreateElement("CreationInfo");17 XmlNode xnXwsp = xmlDoc.SelectSingleNode("xxx");18 if (xnXwsp != null)19 {20 xnXwsp.AppendChild(xeRoot);21 }22 23 //创建并添加
节点24 xeRoot = xmlDoc.CreateElement("CreatedBy");25 xnXwsp = xmlDoc.SelectSingleNode("CreationInfo");26 if (xnXwsp != null)27 {28 xnXwsp.AppendChild(xeRoot);29 }30 31 //创建并添加
节点32 xeRoot = xmlDoc.CreateElement("CreatedTime");33 xnXwsp = xmlDoc.SelectSingleNode("CreationInfo");34 if (xnXwsp != null)35 {36 xnXwsp.AppendChild(xeRoot);37 }38 39 //创建并添加
节点40 xeRoot = xmlDoc.CreateElement("SavedTime");41 xnXwsp = xmlDoc.SelectSingleNode("CreationInfo");42 if (xnXwsp != null)43 {44 xnXwsp.AppendChild(xeRoot);45 }46 47 //创建并添加节点48 xeRoot = xmlDoc.CreateElement("a");49 xnXwsp = xmlDoc.SelectSingleNode("xxx");50 if (xnXwsp != null)51 {52 xnXwsp.AppendChild(xeRoot);53 }54 //创建并添加节点55 xeRoot = xmlDoc.CreateElement("b");56 xnXwsp = xmlDoc.SelectSingleNode("xxx");57 if (xnXwsp != null)58 {59 xnXwsp.AppendChild(xeRoot);60 }61 //创建并添加
节点62 xeRoot = xmlDoc.CreateElement("c");63 xnXwsp = xmlDoc.SelectSingleNode("xxx");64 if (xnXwsp != null)65 {66 xnXwsp.AppendChild(xeRoot);67 }68 //保存XML文档69 try70 {71 xmlDoc.Save(path + fileName + ".xwsp");72 }73 catch (Exception ep)74 {75 Console.WriteLine(ep.Message);76 }77 }
View Code

结果如下:

1 
2
3
4
5
6
7
View Code

子节点<CreatedBy><CreatedTime><SavedTime>死活出不来,打断点<CreationInfo>节点先添加进去了,但是xnXwsp = xmlDoc.SelectSingleNode("CreationInfo");这一句的结果死活为null,想不通,现在都没想通,后来换了一种写法就OK了

这种得不到正确写法的思路是:先添加父节点<CreationInfo>再添加子节点<CreatedBy><CreatedTime><SavedTime>

网上找到另一种写法,思路是:先创建子节点<CreatedBy><CreatedTime><SavedTime>,再创建父节点<CreationInfo>,然后把子节点添加到该父节点下面,再查找根节点<xxx>,最后把父节点<CreationInfo>添加到根节点末尾就OK了,代码如下:

1 private static void CreateXwspFile(string fileName, string path) 2         { 3             XmlDocument xmlDoc = new XmlDocument(); 4             //创建类型声明节点   5             XmlDeclaration xdDec = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null); 6             xmlDoc.AppendChild(xdDec); 7  8             //创建根节点   9             XmlElement xeRoot = xmlDoc.CreateElement("xxx");10             //给节点属性赋值11             xeRoot.SetAttribute("version", "1.0");12             xeRoot.SetAttribute("name", fileName);13             xmlDoc.AppendChild(xeRoot);14 15             ////创建并添加
节点16 ////创建并添加
节点17 ////创建并添加
节点18 ////创建并添加
节点19 XmlElement xeCreationInfo = xmlDoc.CreateElement("CreationInfo");20 XmlElement xeCreatedBy = xmlDoc.CreateElement("CreatedBy");21 xeCreatedBy.InnerText = "Tektronix Course Editor";22 XmlElement xeCreatedTime = xmlDoc.CreateElement("CreatedTime");23 xeCreatedTime.InnerText = DateTime.Now.ToString();24 XmlElement xeSavedTime = xmlDoc.CreateElement("SavedTime");25 xeSavedTime.InnerText = DateTime.Now.ToString();26 xeCreationInfo.AppendChild(xeCreatedBy);27 xeCreationInfo.AppendChild(xeCreatedTime);28 xeCreationInfo.AppendChild(xeSavedTime);29 XmlNode xnXwsp = xmlDoc.SelectSingleNode("xxx");30 if (xnXwsp != null)31 {32 xnXwsp.AppendChild(xeCreationInfo);33 }34 35 //创建并添加节点36 xeRoot = xmlDoc.CreateElement("a");37 if (xnXwsp != null)38 {39 xnXwsp.AppendChild(xeRoot);40 }41 //创建并添加节点42 xeRoot = xmlDoc.CreateElement("b");43 if (xnXwsp != null)44 {45 xnXwsp.AppendChild(xeRoot);46 }47 //创建并添加
节点48 xeRoot = xmlDoc.CreateElement("c");49 if (xnXwsp != null)50 {51 xnXwsp.AppendChild(xeRoot);52 }53 //保存XML文档54 try55 {56 xmlDoc.Save(path + fileName + ".xwsp");57 }58 catch (Exception ep)59 {60 Console.WriteLine(ep.Message);61 }62 }
View Code

结果如下:

1 
2
3
4
Tektronix Course Editor
5
2015/10/1 14:43:56
6
2015/10/1 14:43:57
7
8
9
10
11
View Code

 

现在还有一个问题没有解决:

要在<?xml version="1.0" encoding="utf-8"?>节点的后面插入<!DOCTYPE xwsp>这个节点,不晓得该怎么做,而且后面那个xwsp是可以改变的,意思就是可以自己定义,比如说我可以把它改为aaa之类的,这个暂时还没找到解决方法

转载于:https://www.cnblogs.com/zhyue93/p/xml1.html

你可能感兴趣的文章
【原创】leetCodeOj ---Construct Binary Tree from Preorder and Inorder Traversal 解题报告
查看>>
cakephp获取最后一条sql语句
查看>>
struts2监听器
查看>>
C#中事件机制的理解
查看>>
Android - ActivityLifecycleCallbacks
查看>>
windows常用命令
查看>>
Java之框架Spring(一)
查看>>
[转]C# 安装布署
查看>>
浅析Android中的消息机制-解决:Only the original thread that created a view hierarchy can touch its views....
查看>>
Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.5
查看>>
UITableViewCell 加载、添加、删除
查看>>
算法-KMP-leetcode-java
查看>>
IDEA Caused by: java.lang.OutOfMemoryError: PermGen space
查看>>
算法第3章上机实践报告
查看>>
string时间转换为时间格式
查看>>
2.3NandFlash的操作
查看>>
oracle文件版本
查看>>
使用Dagger2做静态注入, 对比Guice.
查看>>
Nginx+Tomcat 集群部署
查看>>
Maven项目实战(1)
查看>>