共用方式為


讀取項目和屬性內容

若要在一個呼叫中讀取項目與屬性的內容,XmlReader 提供 ReadInnerXmlReadOuterXml 方法。當位於節點時,ReadInnerXml 屬性會從節點中提取所有內容,包含標記,從項目標記後開始直到項目結束標記。呼叫 ReadInnerXml 後,XmlReader 會位於結束項目標記的後面。假設下列 XML 輸入:

輸入

<Book>
 <Price Retail="29.95" />
 <Title BookTitle="My First Book" author="me" />
</Book>

底下是當讀取器位於 Book 項目時,做為呼叫 ReadInnerXml 的結果傳回的輸出:

 <Price Retail="29.95" />
 <Title BookTitle="My First Book" author="me" />

ReadInnerXml 將讀取器放置在讀取項目之結束標記後面。這表示對上述輸入而言,目前的節點如果有的話,是位於 </Book> 結尾項目後面的節點。執行 Read 方法,它便會前進到另一個項目。下面的程式碼範例顯示呼叫 ReadInnerXml 之後資料流中目前的節點,以及在 ReadInnerXml 之後執行 Read 將如何讓讀取器再前進到另一個節點。

public static void Main() 
{
    string text = @"<book><one><title>ABC</title></one><two><price>24.95</price></two></book>";
    XmlTextReader reader = new XmlTextReader(new StringReader(text));
    reader.WhitespaceHandling = WhitespaceHandling.None;

    // Moves the reader to the 'book' node.
    reader.MoveToContent(); 

    // Moves the reader to the 'one' node.
    reader.Read(); 
    reader.MoveToContent();

    // Reads the inner XML of the 'one' node, which is the entire 'title'
    // node, and outputs <title>ABC</title>. 
    Console.WriteLine(reader.ReadInnerXml()); 

    // The reader is now positioned on the 'two' node.
    Console.WriteLine(reader.Name);

    // Calling Read will advance the reader beyond the 'two' node to 
    // the 'price' node.
    reader.Read();
    // Outputs the node of 'price'.
    Console.WriteLine(reader.Name);
}

程式碼的輸出是:

<title>ABC</title>

two

price

ReadInnerXml 依照 XmlNodeType 來剖析 XML 並傳回內容。下列表格顯示項目和屬性的範例內容、呼叫 ReadInnerXml 的傳回值,和呼叫後讀取器的位置。

節點類型 子內容 傳回值 位置
Element <myelem> text </myelem> text 在結尾項目 </myelem> 後的節點上
Attribute <myelem attr1="val1" attr2="val2"> text </myelem> val1 留在屬性節點「attr1」上。

所有其他的 XmlNodeTypes 會傳回 string.Empty

ReadOuterXml 方法的行為相似於 ReadInnerXml 方法,不同的是其傳回值包含開始和結束標記。當位於分葉節點時,這個方法會與執行 Read 操作相同。

ReadOuterXml 剖析 XML 並依照目前的 XmlNodeType 傳回不同的子內容。下列表格顯示項目與屬性的內容範例、呼叫 ReadOuterXml 的傳回值和呼叫後讀取器的位置。

節點類型 子內容 傳回值 位置
Element <elem1> text </elem1> <elem1> text </elem1> 在 </elem1> 標記之後。
Attribute <elem1 attr1="attrValue1" attr2="attrValue2" > text </elem1> attr1="attrValue1" 在屬性節點「attr1」之上。

所有其他的節點類型會將 string.Empty 傳回至 ReadOuterXml

請參閱

使用 XmlReader 讀取 XML | XmlReader 中目前節點位置 | XmlReader 上的屬性設定 | 使用 XmlNameTable 和 XmlReader 來比較物件 | 使用 XmlReader 讀取屬性 | 使用 XmlReader 略過內容 | EntityReference 讀取和展開 | 比較 XmlReader 和 SAX 讀取器 | 使用 XmlTextReader 讀取 XML 資料 | 使用 XmlNodeReader 讀取節點樹狀結構 | 使用 XmlValidatingReader 驗證 XML | 自訂的 XML 讀取器建立 | XmlReader 類別 | XmlReader 成員 | XmlNodeReader 類別 | XmlNodeReader 成員 | XmlTextReader 類別 | XmlTextReader 成員 | XmlValidatingReader 類別 | XmlValidatingReader