日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

XmlDocument类

發布時間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。