讀取項目和屬性內容
若要在一個呼叫中讀取項目與屬性的內容,XmlReader 提供 ReadInnerXml 和 ReadOuterXml 方法。當位於節點時,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