• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#操作XML学习之创建XML文件的同时新建根节点和子节点(多级子节点) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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

初始化的文档节点如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <xxxversion="1.0" name="aaa">
 3     <CreationInfo>
 4         <CreatedBy>CreateUser</CreatedBy>
 5         <CreatedTime>2015/10/1 14:03:48</CreatedTime>
 6         <SavedTime>2015/10/1 14:03:48</SavedTime>
 7     </CreationInfo>
 8     <a/>
 9     <b/>
10     <c/>
11 </xxx>
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             //创建并添加<CreationInfo></CreationInfo>节点
16             xeRoot = xmlDoc.CreateElement("CreationInfo");
17             XmlNode xnXwsp = xmlDoc.SelectSingleNode("xxx");
18             if (xnXwsp != null)
19             {
20                 xnXwsp.AppendChild(xeRoot);
21             }
22 
23             //创建并添加<CreatedBy></CreatedBy>节点
24             xeRoot = xmlDoc.CreateElement("CreatedBy");
25             xnXwsp = xmlDoc.SelectSingleNode("CreationInfo");
26             if (xnXwsp != null)
27             {
28                 xnXwsp.AppendChild(xeRoot);
29             }
30 
31             //创建并添加<CreatedTime></CreatedTime>节点
32             xeRoot = xmlDoc.CreateElement("CreatedTime");
33             xnXwsp = xmlDoc.SelectSingleNode("CreationInfo");
34             if (xnXwsp != null)
35             {
36                 xnXwsp.AppendChild(xeRoot);
37             }
38 
39             //创建并添加<SavedTime></SavedTime>节点
40             xeRoot = xmlDoc.CreateElement("SavedTime");
41             xnXwsp = xmlDoc.SelectSingleNode("CreationInfo");
42             if (xnXwsp != null)
43             {
44                 xnXwsp.AppendChild(xeRoot);
45             }
46 
47             //创建并添加<a></a>节点
48             xeRoot = xmlDoc.CreateElement("a");
49             xnXwsp = xmlDoc.SelectSingleNode("xxx");
50             if (xnXwsp != null)
51             {
52                 xnXwsp.AppendChild(xeRoot);
53             }
54             //创建并添加<b></b>节点
55             xeRoot = xmlDoc.CreateElement("b");
56             xnXwsp = xmlDoc.SelectSingleNode("xxx");
57             if (xnXwsp != null)
58             {
59                 xnXwsp.AppendChild(xeRoot);
60             }
61             //创建并添加<c></c>节点
62             xeRoot = xmlDoc.CreateElement("c");
63             xnXwsp = xmlDoc.SelectSingleNode("xxx");
64             if (xnXwsp != null)
65             {
66                 xnXwsp.AppendChild(xeRoot);
67             }
68             //保存XML文档
69             try
70             {
71                 xmlDoc.Save(path + fileName + ".xwsp");
72             }
73             catch (Exception ep)
74             {
75                 Console.WriteLine(ep.Message);
76             }
77         }
View Code

结果如下:

1 <?xml version="1.0" encoding="utf-8"?>
2 <xxx version="1.0" name="workspace1">
3   <CreationInfo />
4   <a />
5   <b />
6   <c />
7 </xxx>
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             ////创建并添加<CreationInfo></CreationInfo>节点
16             ////创建并添加<CreatedBy></CreatedBy>节点
17             ////创建并添加<CreatedTime></CreatedTime>节点
18             ////创建并添加<SavedTime></SavedTime>节点
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             //创建并添加<a></a>节点
36             xeRoot = xmlDoc.CreateElement("a");
37             if (xnXwsp != null)
38             {
39                 xnXwsp.AppendChild(xeRoot);
40             }
41             //创建并添加<b></b>节点
42             xeRoot = xmlDoc.CreateElement("b");
43             if (xnXwsp != null)
44             {
45                 xnXwsp.AppendChild(xeRoot);
46             }
47             //创建并添加<c></c>节点
48             xeRoot = xmlDoc.CreateElement("c");
49             if (xnXwsp != null)
50             {
51                 xnXwsp.AppendChild(xeRoot);
52             }
53             //保存XML文档
54             try
55             {
56                 xmlDoc.Save(path + fileName + ".xwsp");
57             }
58             catch (Exception ep)
59             {
60                 Console.WriteLine(ep.Message);
61             }
62         }
View Code

结果如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <xxx version="1.0" name="workspace1">
 3   <CreationInfo>
 4     <CreatedBy>Tektronix Course Editor</CreatedBy>
 5     <CreatedTime>2015/10/1 14:43:56</CreatedTime>
 6     <SavedTime>2015/10/1 14:43:57</SavedTime>
 7   </CreationInfo>
 8   <a />
 9   <b />
10   <c />
11 </xxx>
View Code

 

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

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
SCons:替代make和makefile及javac的极好用的c、c++、java构建工具发布时间:2022-07-13
下一篇:
c#sqllike参数发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap