XmlDocument类
XmlDocument類是.NET框架的DOC解析器。XmlDocument將XML視為樹狀結構,它裝載XML文檔,并在內存中構建該文檔的樹狀結構。下面來看下XmlDocument提供了哪些功能。
一、屬性:
Attributes 獲取一個 XmlAttributeCollection,它包含該節點的屬性。 (繼承自 XmlNode。) BaseURI ? ? 獲取當前節點的基 URI。 (重寫 XmlNode..::.BaseURI。) ChildNodes 獲取節點的所有子節點。 (繼承自 XmlNode。) DocumentElement 獲取文檔的根 XmlElement。? DocumentType 獲取包含 DOCTYPE 聲明的節點。? FirstChild 獲取節點的第一個子級。 (繼承自 XmlNode。) HasChildNodes 獲取一個值,該值指示節點是否有任何子節點。 (繼承自 XmlNode。) Implementation ? 獲取當前文檔的 XmlImplementation 對象。? InnerText ? 獲取或設置節點及其所有子節點的串聯值。 (繼承自 XmlNode。) InnerXml 獲取或設置表示當前節點子級的標記。 (重寫 XmlNode..::.InnerXml。) IsReadOnly 獲取一個值,該值指示當前節點是否是只讀的。 (重寫 XmlNode..::.IsReadOnly。) Item 已重載。? LastChild 獲取節點的最后一個子級。 (繼承自 XmlNode。) LocalName 獲取節點的本地名稱。 (重寫 XmlNode..::.LocalName。) Name 獲取節點的限定名。 (重寫 XmlNode..::.Name。) NamespaceURI 獲取該節點的命名空間 URI。 (繼承自 XmlNode。) NameTable 獲取與此實現關聯的 XmlNameTable。? NextSibling ? 獲取緊接在該節點之后的節點。 (繼承自 XmlNode。) NodeType 獲取當前節點的類型。 (重寫 XmlNode..::.NodeType。) OuterXml ? 獲取表示此節點及其所有子節點的標記。 (繼承自 XmlNode。) OwnerDocument 獲取當前節點所屬的 XmlDocument。 (重寫 XmlNode..::.OwnerDocument。) ParentNode ? 已重載。? Prefix ? 獲取或設置該節點的命名空間前綴。 (繼承自 XmlNode。) PreserveWhitespace? 獲取或設置一個值,該值指示是否在元素內容中保留空白。? PreviousSibling 獲取緊接在該節點之前的節點。 (繼承自 XmlNode。) SchemaInfo 返回節點的后架構驗證信息集 (PSVI)。 (重寫 XmlNode..::.SchemaInfo。) Schemas 獲取或設置與此 XmlDocument 關聯的 XmlSchemaSet 對象。? Value 獲取或設置節點的值。 (繼承自 XmlNode。) XmlResolver 設置 XmlResolver 以用于解析外部資源。
二、方法
AppendChild ? 將指定的節點添加到該節點的子節點列表的末尾。 (繼承自 XmlNode。) Clone ??? 創建此節點的一個副本。 (繼承自 XmlNode。) CloneNode ? 創建此節點的一個副本。 (重寫 XmlNode..::.CloneNode(Boolean)。) CreateAttribute 已重載。 創建具有指定名稱的 XmlAttribute。? CreateCDataSection 創建包含指定數據的 XmlCDataSection。? CreateComment 創建包含指定數據的 XmlComment。? CreateDefaultAttribute ? 創建具有指定前綴、本地名稱和命名空間 URI 的默認屬性。? CreateDocumentFragment ?? 創建 XmlDocumentFragment。? CreateDocumentType ?? 返回新的 XmlDocumentType 對象。? CreateElement ? 已重載。 創建 XmlElement。? CreateEntityReference ?? 創建具有指定名稱的 XmlEntityReference。? CreateNavigator 已重載。 創建一個用于導航此文檔的新 XPathNavigator 對象。? CreateNode ? 已重載。 創建 XmlNode。? CreateProcessingInstruction 創建一個具有指定名稱和數據的 XmlProcessingInstruction。? CreateSignificantWhitespace 創建一個 XmlSignificantWhitespace 節點。? CreateTextNode 創建具有指定文本的 XmlText。? CreateWhitespace 創建一個 XmlWhitespace 節點。? CreateXmlDeclaration 創建一個具有指定值的 XmlDeclaration 節點。? GetElementById 獲取具有指定 ID 的 XmlElement。? GetElementsByTagName ? 已重載。 返回一個 XmlNodeList,它包含與指定名稱匹配的所有子代元素的列表。? GetEnumerator 提供對 XmlNode 中節點上“for each”樣式迭代的支持。 (繼承自 XmlNode。) GetHashCode ?? 用作特定類型的哈希函數。 (繼承自 Object。) GetNamespaceOfPrefix ? 查找當前節點范圍內離給定的前綴最近的 xmlns 聲明,并返回聲明中的命名空間 URI。 (繼承自 XmlNode。) GetPrefixOfNamespace ? 查找當前節點范圍內離給定的命名空間 URI 最近的 xmlns 聲明,并返回聲明中定義的前綴。 (繼承自 XmlNode。) ImportNode 將節點從另一個文檔導入到當前文檔。? InsertAfter ? 將指定的節點緊接著插入指定的引用節點之后。 (繼承自 XmlNode。) InsertBefore 將指定的節點緊接著插入指定的引用節點之前。 (繼承自 XmlNode。) Load ? 已重載。 從 Stream、URL、TextReader 或 XmlReader 加載指定的 XML 數據。? LoadXml ? 從指定的字符串加載 XML 文檔。? Normalize 將此 XmlNode 下子樹完全深度中的所有 XmlText 節點都轉換成“正常”形式,在這種形式中只有標記(即標記、注釋、處理指令、 CDATA 節和實體引用)分隔 XmlText 節點,也就是說,沒有相鄰的 XmlText 節點。 (繼承自 XmlNode。) PrependChild 將指定的節點添加到該節點的子節點列表的開頭。 (繼承自 XmlNode。) ReadNode ? 根據 XmlReader 中的信息創建一個 XmlNode 對象。讀取器必須定位在節點或屬性上。? RemoveAll ? 移除當前節點的所有子節點和/或屬性。 (繼承自 XmlNode。) RemoveChild 移除指定的子節點。 (繼承自 XmlNode。) ReplaceChild 用 newChild 節點替換子節點 oldChild。 (繼承自 XmlNode。) Save 已重載。 將 XML 文檔保存到指定的位置。? SelectNodes ? 已重載。? SelectSingleNode 已重載。? Supports 測試 DOM 實現是否實現特定的功能。 (繼承自 XmlNode。) Validate 已重載。 驗證 XmlDocument 是不是 Schemas 屬性中包含的 XML 架構定義語言 (XSD) 架構。? WriteContentTo 將 XmlDocument 節點的所有子級保存到指定的 XmlWriter 中。 (重寫 XmlNode..::.WriteContentTo(XmlWriter)。) WriteTo 將 XmlDocument 節點保存到指定的 XmlWriter。 (重寫 XmlNode..::.WriteTo(XmlWriter)。)
三、事件
NodeChanged 當屬于該文檔的節點的 Value 已被更改時發生。 NodeChanging 當屬于該文檔的節點的 Value 將被更改時發生。? NodeInserted ? 當屬于該文檔的節點已被插入另一個節點時發生。? NodeInserting 當屬于該文檔的節點將被插入另一個節點時發生。? NodeRemoved 當屬于該文檔的節點已被從其父級移除時發生。? NodeRemoving 當屬于該文檔的節點將被從文檔中移除時發生。
助記屬性:
PreviousSibling 上一個兄弟節點 NextSibling 下一個兄弟節點 FirstChild 第一個子節點 LastChild 最后一個子節點 ChildNodes 子節點集合 ParentNode ? 父節點
代碼示例:
xml文檔:
<?xml version="1.0" encoding="utf-8" ?> <Article> <author age="30">張三</author> <length>12000</length> <price>42</price> </Article>代碼:
static void Main(string[] args){XmlDocument doc = new XmlDocument(); doc.Load(@"C:\Users\Administrator\Desktop\ConsoleApplication1\ConsoleApplication1\Test.xml"); //先獲取一個唯一的Article節點,再獲取其下的第一個子節點 然后再獲取該節點下的屬性集合 XmlAttributeCollection xc = doc.SelectSingleNode("Article").FirstChild.Attributes; string age = xc[0].Value; //不過是一個定制的集合罷了,還是集合那套東西 //string age = xc["age"].Value; 支持兩種索引訪問 Console.WriteLine(age); //輸出30 string baseuri = doc.SelectSingleNode("Article").FirstChild.BaseURI; Console.WriteLine(baseuri); //輸出 file:///C:\Users\Administrator\Desktop\ConsoleApplication1\ConsoleApplication1\Test.xml XmlNodeList listNode = doc.SelectSingleNode("Article").ChildNodes; //獲取Article節點下的所有節點列表 for (int i = 0; i < listNode.Count;i++ ) //XmlNodeList不支持foreach遍歷,只能用for { Console.Write(listNode[i].Name + " : " + listNode[i].InnerText); //輸出 author:張三 length:12000 price:30 Name獲取的是限定名,也就是標記名稱 } XmlElement xe = doc.DocumentElement; //獲取根節點 Console.WriteLine(xe.Name); //輸出 Article //XmlDocumentType xdt = doc.DocumentType; //獲取包含 DOCTYPE 聲明的節點。應該是由DTD限定的節點。 //Console.Write(xdt.Name); //此處報 未將對象引用設置到對象的實例,因為找不到有DOCTYPE聲明的元素 Console.WriteLine(doc.HasChildNodes); //輸出 True 當前Document是否包含子節點。 //XmlImplementation xi = doc.Implementation; //不懂怎么用 //xi.ToString(); Console.WriteLine(doc.InnerText); //獲取當前文檔的內容 輸出 張三 12000 30 Console.WriteLine(doc.InnerXml); //輸出 整個Xml文件的字符串內容 Console.WriteLine(doc.IsReadOnly); //獲取當前文檔是否是只讀的。輸出 False XmlNode node = doc.LastChild; Console.WriteLine(node.InnerText); //輸出 張三 12000 30 因為最后一個節點是Article節點,輸出Article節點的所有內容 Console.WriteLine(doc.LocalName); //輸出 #document Console.WriteLine(doc.SelectSingleNode("Article").Name); //輸出Article Console.WriteLine(doc.SelectSingleNode("Article").FirstChild.NextSibling.Name); //length author的下一個兄弟節點 是length XmlNodeType xnt = doc.SelectSingleNode("Article").NodeType; Console.WriteLine(xnt); //輸出Element,表明該節點是元素節點 string str = doc.SelectSingleNode("Article").OuterXml; //此節點及其所有自己點標記,輸出Article節點的所有內容 <Article>省略...</Article> Console.WriteLine(str); XmlDocument x = new XmlDocument(); x.LoadXml(str); Console.WriteLine(doc.SelectSingleNode("Article").OwnerDocument); //獲取該節點所屬的XmlDocument XmlNode xn = doc.SelectSingleNode("Article").LastChild.ParentNode; //ParentNode獲取直接父節點。 Console.WriteLine(xn.Name); //輸出 Article Console.WriteLine(doc.PreserveWhitespace); //是否保留空白 輸出False XmlNode xn1 = doc.SelectSingleNode("Article").LastChild.PreviousSibling; Console.WriteLine(xn1.Name); //輸出length 的確是最后一個節點的前一個節點。 Console.ReadKey(); }為了更加好的展示一些屬性,現在將xml換成這樣:
<?xml version="1.0" encoding="utf-8" ?> <h:Article xmlns:h = "http://www.xxx.com/"> <!--默認命名空間--> <h:author age="30">張三</h:author> <h:length>12000</h:length> <h:price>42</h:price> </h:Article>代碼如下:
static void Main(string[] args){XmlDocument doc = new XmlDocument(); doc.Load(@"C:\Users\Administrator\Desktop\ConsoleApplication1\ConsoleApplication1\Test.xml"); XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable); xnm.AddNamespace("h", "http://www.xxx.com/"); XmlNode Article = doc.SelectSingleNode("h:Article", xnm); string namespace1 = Article.InnerText; Console.WriteLine(namespace1); //輸出 張三 12000 30 Console.WriteLine(Article.Prefix); //輸出 h 獲取當前節點的前綴 Console.WriteLine(Article.NamespaceURI); //輸出 http://www.xxx.com/123 獲取當前節點所在的命名空間 Console.WriteLine(Article.FirstChild.Name + "---" + Article.FirstChild.Value + "---" + Article.FirstChild.LocalName); //以上一行代碼輸出 h:author------author //SchemaInfo 返回節點的后架構驗證信息集 (PSVI)。//Value 獲取或設置節點的值。 (繼承自 XmlNode。) //XmlResolver 設置 XmlResolver 以用于解析外部資源。 Console.ReadKey(); }再來一個展示一下Schemas這個常用的屬性
static void Main(string[] args){XmlDocument doc = new XmlDocument(); //創建文檔 doc.Schemas.Add(null, @"C:\Users\Administrator\Desktop\ConsoleApplication1\ConsoleApplication1\person.xsd"); //添加一個架構對象到本XmlDocument doc.Load(@"C:\Users\Administrator\Desktop\ConsoleApplication1\ConsoleApplication1\person.xml"); //加載xml文件 Console.WriteLine(doc.Schemas.Count); //輸出1 就是第二行添加的那個 Console.WriteLine(doc.SchemaInfo.MemberType); //XmlResolver 設置 XmlResolver 以用于解析外部資源。 Console.ReadKey(); }下面來試下XmlDocument的方法
Test.xml的代碼如下: <?xml version="1.0" encoding="utf-8" ?> <bookstore> <book> <id>1</id> <title lang="屬性1">三國演義</title> <author>羅貫中</author> <year>2005</year> <price id='a1"'>38.5</price> </book> <book> <id>2</id> <title lang="屬性2">西游記</title> <author>吳承恩</author> <year>2004</year> <price>37.5</price> </book> </bookstore>主程序代碼如下:
static void Main(string[] args){XmlDocument doc = new XmlDocument(); //創建文檔 doc.Load(@"C:\Users\Administrator\Desktop\ConsoleApplication1\ConsoleApplication1\Test.xml"); //加載xml文件 XmlNode node1 = doc.CreateNode(XmlNodeType.Element, "pagecount", null); node1.InnerText = "222"; doc.SelectSingleNode("/bookstore").AppendChild(node1); //執行之后 <pagecount>222</pagecount>元素被添加到</bookstore>前面 doc.Save(@"D:\123.xml"); XmlNode node2 = doc.SelectSingleNode("/bookstore/book[1]/title[1]").Clone(); //克隆一個節點出來 Console.WriteLine(node2.InnerText); //輸出三國演義 XmlNode node3 = doc.SelectSingleNode("/bookstore/book[1]/title[1]").CloneNode(true); //參數決定是否克隆子節點數(如果false,文本節點也不克隆) Console.WriteLine(node3.InnerText); //輸出三國演義 XmlAttribute attr = doc.CreateAttribute("age"); //創建一個age屬性 attr.Value = "23"; doc.SelectSingleNode("/bookstore/book[1]/author[1]").Attributes.Append(attr); //執行之后第一個作者變為 <author age="23">羅貫中</author> doc.Save(@"D:\123.xml"); XmlCDataSection cdata = doc.CreateCDataSection("我&你"); doc.SelectSingleNode("/bookstore/book[1]/author[1]").AppendChild(cdata); //執行之后author變為<author age="23">羅貫中<![CDATA[我&你]]></author> doc.Save(@"D:\123.xml"); XmlComment com = doc.CreateComment("2013-2-27 22:37:25"); doc.SelectSingleNode("/bookstore/book[1]/title[1]").AppendChild(com); //執行之后title變為<title lang="屬性1">三國演義<!--2013-2-27 22:37:25--></title> doc.Save(@"D:\123.xml"); XmlDocument doc1 = new XmlDocument(); XmlDocumentFragment xdf = doc1.CreateDocumentFragment(); //一個xml片段,這個類敢情好用 xdf.InnerXml = "<item>widget</item>"; doc1.AppendChild(xdf); Console.WriteLine(doc1.OuterXml); //輸出<item>widget</item> //CreateDefaultAttribute 創建具有指定前綴、本地名稱和命名空間 URI 的默認屬性。 //CreateDocumentType 返回新的 XmlDocumentType 對象。 XmlDocument doc2 = new XmlDocument(); XmlElement element = doc2.CreateElement("title"); //創建一個title 如果現在保存是輸出<title/> 因為還沒有內容 doc2.AppendChild(element); XmlEntityReference xer = doc2.CreateEntityReference("h"); doc2.LastChild.AppendChild(xer); Console.WriteLine(doc2.OuterXml); //輸出</title>&h;</title> XPathNavigator nav = doc2.CreateNavigator(); //一個通過光標的導航模型遍歷XML文檔的數據 XmlText text = doc2.CreateTextNode("你好啊"); //創建一個文本節點 doc2.SelectSingleNode("/title").AppendChild(text); Console.WriteLine(doc2.OuterXml); //輸出</title>&h;你好啊</title> XmlWhitespace xws = doc2.CreateWhitespace(" "); //創建一個空白節點 doc2.SelectSingleNode("/title").AppendChild(xws); Console.WriteLine(doc2.OuterXml); //輸出</title>&h;你好啊 </title> XmlDeclaration xd = doc2.CreateXmlDeclaration("1.0", "utf-8", "yes"); //xml頭 XML聲明部分 XmlNode root = doc2.SelectSingleNode("/title"); doc2.InsertBefore(xd, root); Console.WriteLine(doc2.OuterXml); //執行之后 在頭部加入了<?xml version="1.0" encoding="utf-8" standalont="yes"?> XmlSignificantWhitespace xsw = doc2.CreateSignificantWhitespace(" "); XmlElement ele = doc2.CreateElement("white"); ele.InnerText = "空白啊空白"; ele.AppendChild(xsw); doc2.SelectSingleNode("/title").AppendChild(ele); Console.WriteLine(doc2.OuterXml); //還是添加一大堆空白,不知道與CreateWhitespace有什么區別 XmlDocument doc3 = new XmlDocument(); String PItext = "type='text/xsl' href='book.xsl'"; XmlProcessingInstruction newPI = doc3.CreateProcessingInstruction("xml-stylesheet", PItext); doc3.AppendChild(newPI); Console.WriteLine(doc3.OuterXml); //輸出 <?xml-stylesheet type="text/xsl" hred="book.xsl"?> //GetElementById 獲取具有指定 ID 的 XmlElement。 //GetElementsByTagName 已重載。 返回一個 XmlNodeList,它包含與指定名稱匹配的所有子代元素的列表。 //GetEnumerator 提供對 XmlNode 中節點上“for each”樣式迭代的支持。 (繼承自 XmlNode。) //GetNamespaceOfPrefix 查找當前節點范圍內離給定的前綴最近的 xmlns 聲明,并返回聲明中的命名空間 URI。 (繼承自 XmlNode。) //GetPrefixOfNamespace 查找當前節點范圍內離給定的命名空間 URI 最近的 xmlns 聲明,并返回聲明中定義的前綴。 (繼承自 XmlNode。) //ImportNode 將節點從另一個文檔導入到當前文檔。 //InsertAfter 將指定的節點緊接著插入指定的引用節點之后。 (繼承自 XmlNode。) //InsertBefore 將指定的節點緊接著插入指定的引用節點之前。 (繼承自 XmlNode。) //LoadXml 從指定的字符串加載 XML 文檔。 //Normalize 將此 XmlNode 下子樹完全深度中的所有 XmlText 節點都轉換成“正常”形式,在這種形式中只有標記(即標記、注釋、處理指令、 CDATA 節和實體引用)分隔 XmlText 節點,也就是說,沒有相鄰的 XmlText 節點。 (繼承自 XmlNode。) //PrependChild 將指定的節點添加到該節點的子節點列表的開頭。 (繼承自 XmlNode。) //ReadNode 根據 XmlReader 中的信息創建一個 XmlNode 對象。讀取器必須定位在節點或屬性上。 //RemoveAll 移除當前節點的所有子節點和/或屬性。 (繼承自 XmlNode。) //RemoveChild 移除指定的子節點。 (繼承自 XmlNode。) //ReplaceChild 用 newChild 節點替換子節點 oldChild。 (繼承自 XmlNode。) //Supports 測試 DOM 實現是否實現特定的功能。 (繼承自 XmlNode。) //Validate 已重載。 驗證 XmlDocument 是不是 Schemas 屬性中包含的 XML 架構定義語言 (XSD) 架構。 //WriteContentTo 將 XmlDocument 節點的所有子級保存到指定的 XmlWriter 中。 (重寫 XmlNode..::.WriteContentTo(XmlWriter)。) //WriteTo 將 XmlDocument 節點保存到指定的 XmlWriter。 (重寫 XmlNode..::.WriteTo(XmlWriter)。) Console.ReadKey(); }轉載于:https://www.cnblogs.com/1175429393wljblog/p/4441150.html
總結
以上是生活随笔為你收集整理的XmlDocument类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络电话
- 下一篇: Schlumberger.SPAN.Ro