xml編輯 html_【c# .net】Xml讀寫操作(XmlTextReader 類)

Xml讀寫操作(XmlTextReader 類)

1.XML簡介

1)XML 和 HTML 的設計初衷

  • XML 被設計用來傳輸和存儲數據
  • HTML 被設計用來顯示數據

2)什么是 XML?

  • XML 指可擴展標記語言(EXtensible Markup Language)
  • XML 是一種標記語言,很類似 HTML
  • XML 的設計宗旨是傳輸數據,而非顯示數據
  • XML 標簽沒有被預定義。您需要自行定義標簽
  • XML 被設計為具有自我描述性
  • XML 是 W3C 的推薦標準

3)XML 與 HTML 的主要差異

  • XML 不是 HTML 的替代
  • XML 和 HTML 為不同的目的而設計:
  • XML 被設計為傳輸和存儲數據,其焦點是數據的內容
  • HTML 被設計用來顯示數據,其焦點是數據的外觀
  • HTML 旨在顯示信息,而 XML 旨在傳輸信息

4)關于節點 (非常重要)

根據 DOM,XML 文檔中的每個成分都是一個節點。

  • 整個文檔是一個文檔節點
  • 每個 XML 標簽是一個元素節點
  • 包含在 XML 元素中的文本是文本節點
  • 每一個 XML 屬性是一個屬性節點
  • 注釋屬于注釋節點

c5a27836f027eef4503cc4b3cc7bc773.png

2.訪問XML文件的兩個基本模型

1)DOM模型:使用DOM的好處在于它允許編輯和更新XML文檔,可以隨機訪問文檔中的數據,可以使用XPath查詢,但是,DOM的缺點在于它需要一次性加載整個文檔到內存中,對于大型的文檔,這會造成資源問題。

2)流模型:流模型很好的解決了這個問題,因為它對XML文件的訪問采用的是流的概念,也就是說,任何時候在內存中只有當前節點,但它也有它的不足,它是只讀的,僅向前的,不能在文檔中執行向后導航操作。雖然是各有千秋,但我們也可以在程序中兩者并用實現優劣互補。


3.C#在System.XML 名稱空間中包含以下幾個用于XML的類

XMLTextReader------提供以快速、單向、無緩沖的方式存取XML數據。(單向意味著你只能從前往后讀取XML文件,而不能逆向讀取)

XMLValidatingReader------與XMLTextReader類一起使用,提供驗證DTD、XDR和XSD架構的能力。

XMLDocument------遵循W3C文檔對象模型規范的一級和二級標準,實現XML數據隨機的、有緩存的存取。一級水平包含了DOM的最基本的部分,而二級水平增加多種改進,包括增加了對名稱空間和級連狀圖表(CSS)的支持。

XMLTextWriter------生成遵循 W3C XML 1.0 規范的XML文件。


4. XMLTextReader 類簡介

C# XMLTextReader 這個類設計的目的就是從XML文件中快速的讀取數據,而對系統資源(主要包括內存和處理器時間)不做很高的要求。

如果是需要對 XML 進行多樣性的隨機訪問,編輯操作則使用 XMLDocument,該類具有極強的靈活性。


5.特性

1)單向只讀,無緩沖,且不可逆。

2)讀取完畢需要手動關閉流釋放資源。


XMLTextReader 類的方法和屬性

1.XMLTextReader 類的一些常用的屬性

屬性描述
WhitespaceHandling WhitespaceHandling { get; set; }獲取或設置一個值,該值指定如何處理空白區域
string? BaseURI { get; }獲取當前節點的地址
string NamespaceURI { get; }獲取讀取器定位在的節點的命名空間 URI
Encoding? Encoding { get; }獲取文檔的編碼
int Depth { get; }獲取XML文檔中當前節點的深度
int LineNumber { get; }獲取當前行號
int LinePosition { get; }獲取當前行位置
bool EOF { get; }判斷讀取器是否定位在流結尾
XmlNodeType NodeType { get; }獲取當前節點的類型
string Value { get; }獲取當前節點的文本值
bool IsEmptyElement { get; }判斷當前節點是否為空元素
bool Normalization { get; set; }判斷是否規范化空白區域和屬性值
string LocalName { get; }獲取當前節點的本地名稱
string Name { get; }獲取當前節點的限定名稱
string item[int]{ get; }獲取指定索引處屬性的值
string item[string, string]{ get; }獲取具有指定LocalName和NamespaceURI的屬性的值
string item[string]{ get; }獲取具有指定Name的屬性的值
bool HasAttributes { get; }判斷當前節點是否有任何屬性
int AttributeCount { get; }獲取當前節點上的屬性數目
string Prefix { get; }獲取與當前節點關聯的命名空間前綴
char QuoteChar { get; }獲取用于括起屬性節點的值的引號字符
ReadState ReadState { get; }獲取讀取器的狀態
XmlReaderSettings? Settings { get; }獲取用于創建此XmlReader實例的XmlReaderSettings對象
Type ValueType { get; }獲取當前節點的公共語言運行時類型
string XmlLang { get; }獲取當前 xml:lang 范圍
XmlSpace XmlSpace { get; }獲取當前 xml:space 范圍
bool HasValue { get; }判斷當前節點是否可以具有 String.Empty 以外的 Value
bool Namespaces { get; set; }獲取或設置是否進行命名空間支持
bool CanReadBinaryContent { get; }判斷節點是否實現二進制內容讀取方法
bool CanReadValueChunk { get; }判斷節點是否實現 ReadValueChunk(Char[], Int32, Int32) 方法
bool CanResolveEntity { get; }判斷讀取器是否可以分析和解析實體
EntityHandling EntityHandling { get; set; }獲取或設置一個值,該值指定讀取器處理實體的方式
XmlNameTable NameTable { get; }獲取與此實現關聯的 XmlNameTable

2.XMLTextReader 類的一些常用的方法

方法屬性
void Close();關閉流,并釋放資源
void Dispose();釋放當前使用的所有資源
TextReader GetRemainder();獲取當前節點外XML的剩余部分,返回TextReader
bool Read();從流中讀取下一個節點,調用一次就只會讀取一次
XmlNodeType MoveToContent();跳過 非內容節點 至下一個 內容節點
bool IsStartElement(string name);跳過非內容節點,判斷當前節點是否為指定元素的開始節點
void ReadStartElement();跳過Element節點至下一個節點
void ReadStartElement(string name);跳過 指定元素開始節點 至下一個節點
void ReadEndElement();跳過EndElement節點至下一個節點
bool ReadToDescendant(string name);跳到第一個具有指定限定名的子代元素
bool ReadToFollowing(string name);一直讀取,直到找到所有具有指定限定名的元素
bool ReadToNextSibling(string name);一直讀取,前進到下一個具有指定限定名的同級元素
void ResetState();將讀取器的狀態重置為 ReadState.Initial
string GetAttribute(int i);獲取具有指定索引的屬性的值
string GetAttribute(string name);獲取具有指定屬性名稱的屬性值
IDictionary GetNamespacesInScope(XmlNamespaceScope scope);獲取一個集合,該集合包含當前在范圍內的所有命名空間
void MoveToAttribute(int i);移動到具有指定索引的屬性
bool MoveToAttribute(string name);移動到具有指定名稱的屬性
bool MoveToElement();判斷指針是否移動到屬性節點
bool MoveToFirstAttribute();移動到第一個屬性
bool MoveToNextAttribute();移動到下一個屬性
bool ReadAttributeValue();將屬性值分析為一個或多個 Text、EntityReference 或 EndEntity 節點
string ReadElementString();讀取純文本元素
string ReadInnerXml();讀取當前節點以下的所有內容(包括標記和子級)
string ReadOuterXml();讀取當前節點和所有它的子級的內容(包括標記)
string ReadString();讀取文本節點的內容
XmlReader ReadSubtree();返回新的 XmlReader 實例,此實例可用于讀取當前節點及其所有子節點
void Skip();跳過當前節點的子級

3.XMLTextReader 類的一些不常用方法

方法描述
int ReadChars(char[] buffer, int index, int count);將元素的文本內容讀入字符緩沖區 通過連續調用此方法,可以讀取大的嵌入文本的流
int ReadValueChunk(char[] buffer, int index, int count);讀取嵌入在 XML 文檔中的大量文本流
string ReadContentAsString();將當前文本內容轉為 String 對象讀取,僅支持文本節點
object ReadContentAsObject();將當前文本內容轉為 Object 對象讀取,僅支持文本節點
bool ReadContentAsBoolean();當前文本內容轉為 Boolean 對象讀取,僅支持文本節點
DateTime ReadContentAsDateTime();將當前文本內容轉為 DateTime 對象讀取,僅支持文本節點
DateTimeOffset ReadContentAsDateTimeOffset();將當前文本內容轉為 DateTimeOffset 對象讀取,僅支持文本節點
decimal ReadContentAsDecimal();將當前文本內容轉為 Decimal 對象讀取,僅支持文本節點
double ReadContentAsDouble();將當前文本內容轉為 雙精度浮點數 對象讀取,僅支持文本節點
float ReadContentAsFloat();將當前文本內容轉為 單精度浮點數 對象讀取,僅支持文本節點
int ReadContentAsInt();將當前文本內容轉為 32 位有符號整數讀取,僅支持文本節點
long ReadContentAsLong();將當前文本內容轉為 64 位有符號整數讀取,僅支持文本節點
object ReadElementContentAsObject();將當前文本內容轉為 Object 返回,僅支持有內容的元素節點
string ReadElementContentAsString();將當前文本內容轉為 String 對象返回,僅支持有內容的元素節點
bool ReadElementContentAsBoolean();將當前文本內容轉為 Boolean 對象返回,僅支持有內容的元素節點
DateTime ReadElementContentAsDateTime();將當前文本內容轉為 DateTime 對象返回,僅支持有內容的元素節點
decimal ReadElementContentAsDecimal();將當前文本內容轉為 Decimal 對象返回,僅支持有內容的元素節點
double ReadElementContentAsDouble();將當前文本內容轉為 雙精度浮點數 對象返回,僅支持有內容的元素節點
float ReadElementContentAsFloat();將當前文本內容轉為 單精度浮點數 對象返回,僅支持有內容的元素節點
int ReadElementContentAsInt();將當前文本內容轉為 32 位有符號整數返回,僅支持有內容的元素節點
long ReadElementContentAsLong();將當前文本內容轉為 64 位有符號整數返回,僅支持有內容的元素節點

代碼演示:

由于內容太多,這里只演示代碼,不截圖運行結果,屬性和方法的細節,都會在代碼中進行解釋。

演示用的XML文檔如下:

<?xml version="1.0" encoding="utf-8"?>
<bookstore><book Type="必修課" ISBN="7-111-19149-2" xmlns="https://www.csdn.net/"><title>數據結構</title><author>嚴蔚敏</author><price>30.00</price></book><book Type="必修課" ISBN="7-111-19149-3"><title>路由型與交換型互聯網基礎</title><author>程慶梅</author><price>27.00</price></book><book Type="必修課" ISBN="7-111-19149-4"><title>計算機硬件技術基礎</title><author>李繼燦</author><price>25.00</price></book><book Type="必修課" ISBN="7-111-19149-5"><title>軟件質量保證與管理</title><author>朱少民</author><price>39.00</price></book><book Type="必修課" ISBN="7-111-19149-6"><title>算法設計與分析</title><author>王紅梅</author><price>23.00</price></book><book Type="選修課" ISBN="7-111-19149-1"><title>計算機操作系統</title><author>7-111-19149-1</author><price>28</price></book>
</bookstore>

溫馨提示,直接運行代碼編譯器會卡死,請有選擇性的注釋掉部分代碼再運行

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;namespace XML操作
{class Program{static void Main(string[] args){XmlTextReaderTest();Console.WriteLine("~~~~~~~~ END ~~~~~~~~");Console.ReadKey();}/// <summary>/// 一個簡單輸出方法/// </summary>static void C(string str, object obj){Console.WriteLine("n {0}: {1}", str, obj);Console.WriteLine(" ------------------------------");}static void C(int i, string str){Console.WriteLine(" {0}.{1}", i, str);}static string filePath3 = @"C:UsersAdministratorDesktopTemptest3.xml";/// <summary>/// XmlTextReader 測試用主函數/// </summary>static void XmlTextReaderTest(){XmlTextReader textReader = new XmlTextReader(filePath3);textReader.WhitespaceHandling = WhitespaceHandling.None;while (textReader.Read()){if (textReader.NodeType == XmlNodeType.Element){XmlAttribute(textReader);XmlMethod(textReader);}if (textReader.NodeType == XmlNodeType.Text){XmlAttribute(textReader);XmlMethod(textReader);}if (textReader.NodeType == XmlNodeType.EndElement){XmlAttribute(textReader);XmlMethod(textReader);}}//讀取完畢后要記得關閉流,否則會占用文檔,無法被其它線程打開textReader.Close();}/// <summary>/// XmlTextReader 屬性/// </summary>static void XmlAttribute(XmlTextReader textReader){Console.WriteLine("/");C(1, "獲取或設置一個值,該值指定如何處理空白區域");//該屬性可以在讀取器讀取XML文檔時控制是否讀取空白區域//一般是在構造好以后進行設置,在讀取時設置也可以,但是在設置以前已經讀取的內容,還是會讀取到空白區域WhitespaceHandling whitespaceHandling = textReader.WhitespaceHandling;C("whitespaceHandling", whitespaceHandling);C(2, "獲取當前節點的地址");//如果是網絡XML,就會獲取到網絡地址string baseURI = textReader.BaseURI;C("baseURI", baseURI);C(3, "獲取讀取器定位在的節點的命名空間 URI");//該屬性用于獲取網絡XML的節點網絡地址//該地址的屬性命名必須是 xmlns,否則無法讀取地址string namespaceURI = textReader.NamespaceURI;C("namespaceURI", namespaceURI);C(4, "獲取文檔的編碼");Encoding encoding = textReader.Encoding;C("encoding", encoding);C(5, "獲取XML文檔中當前節點的深度");//這里的深度指的是節點的層級,根節點是0,元素節點是1,元素節點子級是2以此類推int depth = textReader.Depth;C("depth", depth);C(6, "獲取當前行號");//指在XML文件中所在的行數int lineNumber = textReader.LineNumber;C("lineNumber", lineNumber);C(7, "獲取當前行位置");//指該標簽在當前行的起始下標,也就是第一個字母的橫向坐標int linePosition = textReader.LinePosition;C("linePosition", linePosition);C(8, "判斷讀取器是否定位在流結尾");//很好理解,當讀取完所有值時,讀取器就會在流的結尾處//只有在While循環完畢后,指針才會在流的結尾處,在循環體內時,并不會在結尾bool eOF = textReader.EOF;C("eOF", eOF);C(9, "獲取當前節點的類型");XmlNodeType nodeType = textReader.NodeType;C("nodeType", nodeType);C(10, "獲取當前節點的文本值");//只能獲取 XmlNodeType 類型為 Text 類型的節點的文本值string value = textReader.Value;C("value", value);C(11, "判斷當前節點是否為空元素");//沒有文本內容以及子級的元素就是空元素,空元素可以有屬性bool isEmptyElement = textReader.IsEmptyElement;C("isEmptyElement", isEmptyElement);C(12, "判斷是否規范化空白區域和屬性值");bool normalization = textReader.Normalization;C("normalization", normalization);C(13, "獲取當前節點的本地名稱");//經過多次測試,LocalName和Name我依然分不清有啥區別//求高人指點string localName = textReader.LocalName;C("localName", localName);C(14, "獲取當前節點的限定名稱");string name = textReader.Name;C("name", name);C(15, "獲取指定索引處屬性的值(XmlReader)");//如果指定索引位置沒有屬性,運行時會報錯try{string item = textReader[0];C("item[int]", item);}catch (Exception){Console.WriteLine(" 無屬性可索引 n");}C(16, "獲取具有指定LocalName和NamespaceURI的屬性的值(XmlReader)");//索引無效時會返回null不會報錯//看似索引也沒問題,不知為何就是返回null//求高人指點string item2 = textReader["book", "xmlns"];if (item2 == null){C("item[string, string]", "null");}else{C("item[string, string]", item2);}C(17, "獲取具有指定Name的屬性的值(XmlReader)");//索引無效時會返回null不會報錯string item3 = textReader["Type"];if (item3 == null){C("item[string]", "null");}else{C("item[string]", item3);}C(18, "判斷當前節點是否有任何屬性(XmlReader)");bool hasAttributes = textReader.HasAttributes;C("hasAttributes", hasAttributes);C(19, "獲取當前節點上的屬性數目");int attributeCount = textReader.AttributeCount;C("attributeCount", attributeCount);C(20, "獲取與當前節點關聯的命名空間前綴");string prefix = textReader.Prefix;C("prefix", prefix);C(21, "獲取用于括起屬性節點的值的引號字符");//經過測試,無論是單引號還是雙引號,都是輸出雙引號//耐人尋味呢char quoteChar = textReader.QuoteChar;C("quoteChar", quoteChar);C(22, "獲取讀取器的狀態");//讀取器狀態為枚舉類型,主要用來判斷當前讀取進度或者狀態//例如:正在讀取,讀取報錯,關閉讀取,讀取完畢等ReadState readState = textReader.ReadState;C("readState", readState);C(23, "獲取用于創建此XmlReader實例的XmlReaderSettings對象(XmlReader)");//XmlReaderSettings用來設置XML讀取方式,要配合XmlReader使用XmlReaderSettings settings = textReader.Settings;C("settings", settings);C(24, "獲取當前節點的公共語言運行時類型(XmlReader)");Type valueType = textReader.ValueType;C("valueType", valueType);C(25, "獲取當前 xml:lang 范圍");//???string xmlLang = textReader.XmlLang;C("xmlLang", xmlLang);C(26, "獲取當前 xml:space 范圍");//???XmlSpace xmlSpace = textReader.XmlSpace;C("xmlSpace", xmlSpace);C(27, "判斷當前節點是否可以具有 String.Empty 以外的 Value");bool hasValue = textReader.HasValue;C("hasValue", hasValue);C(28, "獲取或設置是否進行命名空間支持");bool namespaces = textReader.Namespaces;C("namespaces", namespaces);C(29, "判斷節點是否實現二進制內容讀取方法");bool canReadBinaryContent = textReader.CanReadBinaryContent;C("canReadBinaryContent", canReadBinaryContent);C(30, "判斷節點是否實現 ReadValueChunk(Char[], Int32, Int32) 方法");bool canReadValueChunk = textReader.CanReadValueChunk;C("canReadValueChunk", canReadValueChunk);C(31, "判斷讀取器是否可以分析和解析實體");//???bool canResolveEntity = textReader.CanResolveEntity;C("canResolveEntity", canResolveEntity);C(32, "獲取或設置一個值,該值指定讀取器處理實體的方式");//???EntityHandling entityHandling = textReader.EntityHandling;C("entityHandling", entityHandling);C(33, "獲取與此實現關聯的 XmlNameTable");XmlNameTable nameTable = textReader.NameTable;C("nameTable", nameTable);Console.WriteLine("*******************************");}/// <summary>/// XmlTextReader 方法/// </summary>static void XmlMethod(XmlTextReader textReader){Console.WriteLine("///");Console.WriteLine("整個Reader的操作:");//關閉流,并釋放資源textReader.Close();//釋放當前使用的所有資源 (XmlReader)textReader.Dispose();//獲取當前節點外XML的剩余部分,返回TextReaderusing (TextReader text = textReader.GetRemainder()){StringBuilder stringBuilder = new StringBuilder(text.ReadToEnd());Console.WriteLine(stringBuilder);}Console.WriteLine("///");Console.WriteLine("節點之間的操作:");//從流中讀取下一個節點,調用一次就只會讀取一次//Read()的讀取方式是一個節點一個節點的讀取,并不是一次性讀完一整行//比如 <title>數據結構</title>,這里會分為三次讀取,讀取步驟如下://1.<title>(開始元素節點Element)//2.數據結構(文本節點Text)//3.</title>(結束元素節點EndElement)bool read = textReader.Read();C("read", read);C("read", textReader.Name);//跳過 非內容節點 至下一個 內容節點//內容節點(非空節點TextCDATAElementEndElementEntityReferenceEndEntity)XmlNodeType moveToContent = textReader.MoveToContent();C("moveToContent", moveToContent);//跳過非內容節點,判斷當前節點是否為指定元素的開始節點bool isStartElement = textReader.IsStartElement("price");C("isStartElement", isStartElement);//跳過Element節點至下一個節點(XmlReader)//當前節點必須是Element類型,否則會報錯textReader.ReadStartElement();//跳過 指定元素開始節點 至下一個節點(XmlReader)//當前節點必須是指定的元素,同時必須是開始節點,否則會報錯textReader.ReadStartElement("book");//跳過EndElement節點至下一個節點(XmlReader)//當前節點必須是EndElement類型,否則會報錯textReader.ReadEndElement();//跳到第一個具有指定限定名的子代元素(XmlReader)//并且只有該指定子級會被完整讀取所有節點//下一行開始,所有子級只讀取元素節點不讀取文本節點textReader.ReadToDescendant("price");//一直讀取,直到找到所有具有指定限定名的元素(XmlReader)//該過程會跳過所有非指定元素節點,并且匹配到的是開始標簽,不會匹配到結束標簽//如果存在相同的元素節點,那么會繼續跳過其它所有節點獲取指定元素//特別注意的是,如果找不到對應名稱的節點,那么就會直接讀到結尾,并且節點為nulltextReader.ReadToFollowing("title");C("petId", textReader.ReadString());//一直讀取,前進到下一個具有指定限定名的同級元素(XmlReader)//需要先把指針定位在指定元素的深度,該方法只會在同一深度的標簽中查找具有指定name的下一個元素//如果該深度不存在指定元素,那么會直接結束textReader.ReadToNextSibling("title");//將讀取器的狀態重置為 ReadState.Initial//該方法會停止Read方法讀取數據,如果是在循環過程中使用,會報錯textReader.ResetState();Console.WriteLine("///");Console.WriteLine("單個節點的操作:");//獲取具有指定索引的屬性的值string getAttribute_int = textReader.GetAttribute(0);C("GetAttribute(int)", getAttribute_int);//獲取具有指定屬性名稱的屬性值string getAttribute_string = textReader.GetAttribute("ISBN");C("GetAttribute(string)", getAttribute_string);//獲取一個集合,該集合包含當前在范圍內的所有命名空間IDictionary<string, string> getNamespacesInScope = textReader.GetNamespacesInScope(XmlNamespaceScope.All);foreach (var item in getNamespacesInScope.Keys){C("GetNamespacesInScope[key]", item);C("GetNamespacesInScope[value]", getNamespacesInScope[item]);}//移動到具有指定索引的屬性//通過int索引時,如果該節點沒有屬性,會報錯try{textReader.MoveToAttribute(0);}catch (Exception) { }//移動到具有指定名稱的屬性//使用string索引時,沒有屬性不會報錯,返回bool值確定是否存在指定順序性textReader.MoveToAttribute("Type");//判斷指針是否移動到屬性節點//該方法無法移動指針,只能判斷當前指針是否在屬性節點上textReader.MoveToElement();//移動到第一個屬性textReader.MoveToFirstAttribute();//移動到下一個屬性//如果當前指針不在屬性上,則移動到第一個屬性,如果在屬性上,則移動到下一個屬性,textReader.MoveToNextAttribute();//將屬性值分析為一個或多個 Text、EntityReference 或 EndEntity 節點//指針必需移動到屬性節點上textReader.ReadAttributeValue();//讀取純文本元素//1.如果該節點沒有文本,運行會報錯//2.使用try/catch可以跳過報錯,如果不使用string指定標簽,指針還會跳到下一個有文本的節點上(為啥呢?)try{string readElementString = textReader.ReadElementString();C("readElementString", readElementString);}catch (Exception) { }//讀取當前節點以下的所有內容(包括標記和子級)(XmlReader)//該方法不包括讀取自身內容C("ReadInnerXml", textReader.ReadInnerXml());//讀取當前節點和所有它的子級的內容(包括標記)(XmlReader)//該方法包括讀取自身內容C("ReadOuterXml", textReader.ReadOuterXml());//讀取文本節點的內容C("ReadString", textReader.ReadString());//返回新的 XmlReader 實例,此實例可用于讀取當前節點及其所有子節點(XmlReader)//只能在元素節點上調用該方法C("ReadSubtree", textReader.ReadSubtree());//跳過當前節點的子級textReader.Skip();Console.WriteLine("///");Console.WriteLine("不常用的單個節點的操作:");//將元素的文本內容讀入字符緩沖區 通過連續調用此方法,可以讀取大的嵌入文本的流char[] ch = new char[1024];int readChars = textReader.ReadChars(ch, 0, ch.Length);Console.WriteLine(readChars);Console.WriteLine(ch);//讀取嵌入在 XML 文檔中的大量文本流(XmlReader)//提示不支持該方法,????char[] ch2 = new char[1024];int readValueChunk = textReader.ReadValueChunk(ch2, 0, ch2.Length);//將當前文本內容轉為 String 對象讀取(XmlReader),僅支持文本節點string readContentAsString = textReader.ReadContentAsString();Console.WriteLine("ReadContentAsString: {0}", readContentAsString);//將當前文本內容轉為 Object 對象讀取(XmlReader),僅支持文本節點var readContentAsObject = textReader.ReadContentAsObject();Console.WriteLine("ReadContentAsObject: {0}", readContentAsObject);//將當前文本內容轉為 Boolean 對象讀取(XmlReader),僅支持文本節點//文本內容必須為讀取類型的值才能讀取,必須是 true/false,否則會報錯var readContentAsBoolean = textReader.ReadContentAsBoolean();Console.WriteLine("ReadContentAsBoolean: {0}", readContentAsBoolean);//將當前文本內容轉為 DateTime 對象讀取(XmlReader),僅支持文本節點//規則同上DateTime readContentAsDateTime = textReader.ReadContentAsDateTime();Console.WriteLine("ReadContentAsDateTime: {0}", readContentAsDateTime);//將當前文本內容轉為 DateTimeOffset 對象讀取(XmlReader),僅支持文本節點//規則同上var readContentAsDateTimeOffset = textReader.ReadContentAsDateTimeOffset();Console.WriteLine("ReadContentAsDateTimeOffset: {0}", readContentAsDateTimeOffset);//將當前文本內容轉為 Decimal 對象讀取(XmlReader),僅支持文本節點//規則同上var readContentAsDecimal = textReader.ReadContentAsDecimal();Console.WriteLine("ReadContentAsDecimal: {0}", readContentAsDecimal);//將當前文本內容轉為 雙精度浮點數 對象讀取(XmlReader),僅支持文本節點//規則同上var readContentAsDouble = textReader.ReadContentAsDouble();Console.WriteLine("ReadContentAsDouble: {0}", readContentAsDouble);//將當前文本內容轉為 單精度浮點數 對象讀取(XmlReader),僅支持文本節點//規則同上var readContentAsFloat = textReader.ReadContentAsFloat();Console.WriteLine("ReadContentAsFloat: {0}", readContentAsFloat);//將當前文本內容轉為 32 位有符號整數讀取(XmlReader),僅支持文本節點//規則同上var readContentAsInt = textReader.ReadContentAsInt();Console.WriteLine("ReadContentAsInt: {0}", readContentAsInt);//將當前文本內容轉為 64 位有符號整數讀取(XmlReader),僅支持文本節點//規則同上var readContentAsLong = textReader.ReadContentAsLong();Console.WriteLine("ReadContentAsLong: {0}", readContentAsLong);//將當前文本內容轉為 Object 返回(XmlReader),僅支持有內容的元素節點//讀取時無法讀取注釋,且該節點不能包含子級,讀取完以后,指針會指向下個節點var readElementContentAsObject = textReader.ReadElementContentAsObject();Console.WriteLine("ReadElementContentAsObject: {0}", readElementContentAsObject);//將當前文本內容轉為 String 對象返回(XmlReader),僅支持有內容的元素節點//讀取時無法讀取注釋,且該節點不能包含子級,讀取完以后,指針會指向下個節點var readElementContentAsString = textReader.ReadElementContentAsString();Console.WriteLine("ReadElementContentAsString: {0}", readElementContentAsString);//將當前文本內容轉為 Boolean 對象返回(XmlReader),僅支持有內容的元素節點//1.文本內容必須為讀取類型的值才能讀取//2.讀取時無法讀取注釋,且該節點不能包含子級//3.讀取完以后,指針會指向下個節點var readElementContentAsBoolean = textReader.ReadElementContentAsBoolean();Console.WriteLine("ReadElementContentAsBoolean: {0}", readElementContentAsBoolean);//將當前文本內容轉為 DateTime 對象返回(XmlReader),僅支持有內容的元素節點//規則同上var readElementContentAsDateTime = textReader.ReadElementContentAsDateTime();Console.WriteLine("ReadElementContentAsDateTime: {0}", readElementContentAsDateTime);//將當前文本內容轉為 Decimal 對象返回(XmlReader),僅支持有內容的元素節點//規則同上var readElementContentAsDecimal = textReader.ReadElementContentAsDecimal();Console.WriteLine("ReadElementContentAsDecimal: {0}", readElementContentAsDecimal);//將當前文本內容轉為 雙精度浮點數 對象返回(XmlReader),僅支持有內容的元素節點//規則同上var readElementContentAsDouble = textReader.ReadElementContentAsDouble();Console.WriteLine("ReadElementContentAsDouble: {0}", readElementContentAsDouble);//將當前文本內容轉為 單精度浮點數 對象返回(XmlReader),僅支持有內容的元素節點//規則同上var readElementContentAsFloat = textReader.ReadElementContentAsFloat();Console.WriteLine("ReadElementContentAsFloat: {0}", readElementContentAsFloat);//將當前文本內容轉為 32 位有符號整數返回(XmlReader),僅支持有內容的元素節點//規則同上var readElementContentAsInt = textReader.ReadElementContentAsInt();Console.WriteLine("ReadElementContentAsInt: {0}", readElementContentAsInt);//將當前文本內容轉為 64 位有符號整數返回(XmlReader),僅支持有內容的元素節點//規則同上var readElementContentAsLong = textReader.ReadElementContentAsLong();Console.WriteLine("ReadElementContentAsLong: {0}", readElementContentAsLong);Console.WriteLine("*******************************");}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393549.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393549.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393549.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jQ層級選擇器

<!DOCTYPE html><html> <head> <meta charset"utf-8" /> <title></title> </head> <body> </body></html> <h1>沁園春雪</h1> <h2>毛***</h2> <div> <span> <d…

spring 獲取url參數

1. usl格式&#xff1a; http://localhost:8080/contact/delete/3 java代碼 RequestMapping(value"/delete/{id}")public Map<String,Object> delete(PathVariable("id") Integer id){boolean result contactService.deleteContactById(id); 也可以…

leetcode475. 供暖器(二分查找)

冬季已經來臨。 你的任務是設計一個有固定加熱半徑的供暖器向所有房屋供暖。 現在&#xff0c;給出位于一條水平線上的房屋和供暖器的位置&#xff0c;找到可以覆蓋所有房屋的最小加熱半徑。 所以&#xff0c;你的輸入將會是房屋和供暖器的位置。你將輸出供暖器的最小加熱半徑…

如何在命令行中使用jq將JSON轉換為CSV

by Knut Melvr通過納特梅爾瓦 如何在命令行中使用jq將JSON轉換為CSV (How to transform JSON to CSV using jq in the command line) The shell tool jq is awesome for dealing with JSON-data. It can also transform that data into handy CSV-files, ready for all your s…

macaca運行報錯之chrome-driver問題處理,關閉 Chrome 的自動更新

自動更新是 Chrome 非常實用的功能之一&#xff0c;但在有些情況下可能還是有關閉自動更新的需求&#xff0c;比如需要用某一個具體的版本來測試一些東西&#xff0c;或者更新之后反而出現了新的 Bug等等。由于一般人沒有這樣的需求&#xff0c;所以 Google 沒有公布關閉自動更…

docker啟動sqlserver_Docker搭建SQLServer

一、下載鏡像docker pull microsoft/mssql-server-linux二、啟動容器docker-composeversion: 3services:sqlserver:image: microsoft/mssql-server-linux:latestrestart: alwaysprivileged: truecontainer_name: sqlserverports:- 1433:1433volumes:- ./data:/var/opt/mssql/da…

【Python】 子進程創建與使用subprocess

subprocess *****本文參考了Vamei大神的http://www.cnblogs.com/vamei/archive/2012/09/23/2698014.html   運用subprocess包可以在運行python的進程下進一步開啟一個子進程&#xff0c;創建子進程要注意 1. 父進程是否暫停 2.創建出的子進程返回了什么 3.執行出錯&#xff0c…

異步查詢回調函數調用

異步查詢數據&#xff0c;需要對返回的數據進行后續步驟操作&#xff0c;使用使用方法&#xff1a; 1、new promise方法使用。 2、回調函數使用 使用方式&#xff1a;   pageGetDeviceTreeInfo({deviceTypeAry:[1]},this.getTreeData); 函數&#xff1a; 1 export function p…

前端開發從項目中獲得什么_我如何獲得副項目的前10個客戶以及從他們那里學到的東西...

前端開發從項目中獲得什么by Tigran Hakobyan由Tigran Hakobyan 我如何獲得副項目的前10個客戶以及從他們那里學到的東西 (How I got my first 10 customers for my side-project and what I’ve learned from them) My name is Tigran, I’m 29, and I’m the creator of Cro…

leetcode278. 第一個錯誤的版本(二分查找)

你是產品經理&#xff0c;目前正在帶領一個團隊開發新的產品。不幸的是&#xff0c;你的產品的最新版本沒有通過質量檢測。由于每個版本都是基于之前的版本開發的&#xff0c;所以錯誤的版本之后的所有版本都是錯的。 假設你有 n 個版本 [1, 2, …, n]&#xff0c;你想找出導致…

lrzsz ??linux與windows互傳

2019獨角獸企業重金招聘Python工程師標準>>> lrzsz linux與windows互傳 # 前提是使用 xshell 或者 securecrt 這兩個遠程軟件&#xff0c;putty不支持 yum install -y lrzsz //安裝文件包 linux向windows 傳文件使用 &#xff1a; sz 文件名 回…

mysql show 命令_mysql show 相關命令

processlist的show方式是不能使用過濾查找&#xff0c;可能源自MySQL的內部安全機制吧&#xff0c;show是用來查看MySQL內部運行數據&#xff0c;其實processlist就是information_schema數據庫中的一張表&#xff0c;那么通過查表的方式肯定是可以的了&#xff1a;SELECT user,…

ordereddict有序字典

import collections as con# 有序添加和取字典元素 ord con.OrderedDict() ord[a] 1 ord[b] 2 ord[c] 3 print(ord, ordereddict)# 移動某元素到最后 ord.move_to_end(a) print(ord, move_to_end)轉載于:https://www.cnblogs.com/xh4528/p/6538700.html

Spring: (一) -- 春雨潤物之 核心IOC

作為一個Java人&#xff0c;想必都或多或少的了解過Spring。對于其優勢也能道個一二&#xff0c;諸如方便解耦、支持AOP編程、支持聲明式事務、方便測試等等。Spring也不僅僅局限于服務器端開發&#xff0c;它可以做非常多的事情&#xff0c;任何Java應用都可以在簡單性、可測試…

reactjs快速如夢_幫助您理解和創建ReactJS應用的快速指南

reactjs快速如夢此帖子分為2部分 (This Post is divided into 2 parts) The First Part demonstrates how to create a simple React app using ‘create-react-app’ CLI and explains the project structure. 第一部分演示了如何使用“ create-react-app” CLI創建簡單的Reac…

leetcode1351. 統計有序矩陣中的負數(二分查找)

給你一個 m * n 的矩陣 grid&#xff0c;矩陣中的元素無論是按行還是按列&#xff0c;都以非遞增順序排列。 請你統計并返回 grid 中 負數 的數目。 示例 1&#xff1a; 輸入&#xff1a;grid [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]] 輸出&#xff1a;8 解釋&a…

XUbuntu22.04之跨平臺音頻編輯工具(平替Audition):ocenaudio(二百零二)

加粗樣式 簡介&#xff1a; CSDN博客專家&#xff0c;專注Android/Linux系統&#xff0c;分享多mic語音方案、音視頻、編解碼等技術&#xff0c;與大家一起成長&#xff01; 優質專欄&#xff1a;Audio工程師進階系列【原創干貨持續更新中……】&#x1f680; 優質專欄&#…

QueryList4采集-圖片本地化

QueryList4采集圖片本地化 //采集public function cai() {//采集的url地址$data QueryList::get(https://news.ke.com/sh/baike/0033/)->rules([title > [.LOGCLICK , text],content > [.summary , text],image > [.lj-lazy , data-original , ,function($res){//…

mysql 從服務器同步設置_mysql主從同步配置

1.為什么要主從同步&#xff1f;在Web應用系統中&#xff0c;數據庫性能是導致系統性能瓶頸最主要的原因之一。尤其是在大規模系統中&#xff0c;數據庫集群已經成為必備的配置之一。集群的好處主要有&#xff1a;查詢負載、數據庫復制備份等。其中Master負責寫操作的負載&…

int、long、long long取值范圍

short int 1個字節儲存 unsigned short int 0&#xff5e;255short int -128&#xff5e;127 int 2個字節儲存 unsigned int 0&#xff5e;4294967295 int 2147483648&#xff5e;2147483647 long 4個字節儲存 unsigned long 0&#xff5e;4294967295long 21…