共用方式為


使用 XmlReader 略過內容

內容可以使用二種方式略過。一種方式是使用 MoveToContent 方法呼叫直接移動至內容的方法。另一種方式是直接呼叫 Skip 方法,從目前的節點中略過子節點。

直接移動至內容

若要移動至內容,請使用 MoveToContent 方法。這個方法會檢查目前節點是否為內容節點。內容節點被定義為任何一種 Text、CDATA、Element、EndElement、EntityReference 或 EndEntity 節點。如果它不是上述的節點類型之一,它會略過節點到下一個節點或檔案尾端。它會持續略過,直到發現這種類型的節點,或是到達檔案的尾端,然後結束。換句話說,它會略過下列的節點類型:

  • XmlDeclaration
  • ProcessingInstruction
  • DocumentType
  • Comment
  • Attribute
  • Whitespace
  • SignificantWhitespace

如果應用程式只要內容,使用這種類型的內容巡覽是比較有效率的,而不是呼叫 Read 將讀取器移動至下一個節點,然後強制應用程式測試節點類型,並決定是否有內容可以讀取,如果有則讀取。

如果應用程式位於屬性節點,呼叫 MoveToContent 從目前節點位置移動至屬性所擁有的項目中。如果應用程式已經位於內容節點,則 MoveToContent 呼叫會傳回 NodeType 屬性值至應用程式中。這些行為允許應用程式略過隨機的 XML 標記。例如,試想下列 XML 輸入:

<?xml version="1.0">
<!DOCTYPE price SYSTEM "abc">
<!––the price of the book –->
<price>123.4</price>

下列程式碼會找出「123.4」的 price 項目,然後將文字內容轉換成雙精度浮點數 (Double):

If readr.MoveToContent() = XmlNodeType.Element And readr.Name = "price" Then
   _price = XmlConvert.ToDouble(readr.ReadString())
End If
[C#]
if (readr.MoveToContent() == XmlNodeType.Element && readr.Name =="price")
{
    _price = XmlConvert.ToDouble(readr.ReadString());
}

另一個範例中,MoveToContent 常用於找出 XML 檔案中的 DocumentElement 節點。假設下列 XML 輸入檔案稱為 file.xml

<?xml encoding="utf-8"?>
<!-- Can have comment and DOCTYPE nodes here to skip past here -->
<phone a="2" b="N">
<data>
   <d1>Data</d1>
   <d2>More Data</d2>
   <d3>Some More Data</d3>
</data>
</phone>

下列程式碼會指出 DocumentElement 節點 <phone> 中讀取器的位置:

Dim doc as XmlDocument = New XmlDocument()
Dim treader as New XmlTextReader("file.xml")
treader.MoveToContent()        
[C#]
XmlDocument doc = new XmlDocument();
XmlTextReader treader = new XmlTextReader("file.xml");
treader.MoveToContent();

使用 Skip 方法略過資料

Skip 方法會移動至目前的項目。如果節點類型是 XmlNodeType.Element,呼叫 Skip 會移動所有項目的內容和項目結束標記。

例如,如果您有下列的 XML:

<a name="facts" location="123">
<x/> 
abc 
<y/>
</a>
<b>
...
</b>

而您正位於 <a> 節點或任何它的屬性上,呼叫 Skip 會移動至 <b> 節點上。如果您正位於分葉節點上,像是 x 或文字節點 abc 上,則 Skip 會略過到下一個節點,這表示它的行為實際上與呼叫 Read 相同。

Skip 會將符合語法的規則套用至內容中。

請參閱

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