首页 > 学院 > 开发设计 > 正文

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

2019-11-14 13:56:17
字体:
来源:转载
供稿:网友

最近工作中遇到一个问题,要求创建一个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             try70             {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             try55             {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之类的,这个暂时还没找到解决方法


上一篇:C#预定义类型

下一篇:高斯算法

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表