C#操作XML學習之創建XML文件的同時新建根節點和子節點(多級子節點)


最近工作中遇到一個問題,要求創建一個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之類的,這個暫時還沒找到解決方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM