共用方式為


System.Xml.XmlTextReader 類別

本文提供此 API 參考文件的補充備註。

備註

建議您使用 XmlReader 方法來建立XmlReader.Create實例,以利用新功能。

XmlTextReader 提供 XML 數據流的正向唯讀存取權。 目前的節點是指讀取器所在的節點。 讀取器會使用任何讀取方法和屬性來進階,以反映目前節點的值。

這個類別會實作 XmlReader 並符合 W3C 可延伸標記語言 (XML) 1.0 和 XML 建議中的命名空間。 XmlTextReader 提供下列功能:

  • 強制執行格式正確的 XML 規則。

  • XmlTextReader 不提供數據驗證。

  • 檢查DocumentType節點是否格式正確。 XmlTextReader 會檢查 DTD 的格式是否正確,但不會使用 DTD 進行驗證。

  • 對於NodeTypeXmlNodeType.EntityReference 的節點,會傳回單一空白EntityReference節點(也就是Value屬性為String.Empty)。

備註

DTD 中實體的實際宣告稱為 Entity 節點。 當您參考數據中的這些節點時,這些節點稱為 EntityReference 節點。

  • 不會展開預設屬性。

由於 XmlTextReader 沒有執行數據驗證所需的額外的檢查,因此可提供快速格式良好的剖析器。

若要執行資料驗證,請使用驗證 XmlReader

若要從 XmlDocument讀取 XML 資料, 請使用 XmlNodeReader

XmlTextReader 會在發生 XML 剖析錯誤時拋出 XmlException。 拋出例外狀況後,讀取器的狀態無法預測。 例如,回報的節點類型可能與目前節點的實際節點類型不同。 ReadState使用屬性來檢查讀取器是否處於錯誤狀態。

安全性考慮

以下是使用 XmlTextReader 類別時要考慮的事項。

  • 擲回 XmlTextReader 的例外狀況可能會揭露您不希望暴露給應用程式的路徑資訊。 您的應用程式必須攔截例外狀況,並適當地處理它們。

  • 默認會啟用 DTD 處理。 如果您擔心拒絕服務問題,或應對不受信任的來源,請停用 DTD 處理。 將 DtdProcessing 屬性設定為 Prohibit 以停用 DTD 處理。

    如果您已啟用 DTD 處理,您可以使用 XmlSecureResolver 來限制 XmlTextReader 可以存取的資源。 您也可以設計應用程式,讓 XML 處理受到記憶體和時間限制。 例如,在 ASP.NET 應用程式中設定逾時限制。

  • XML 資料可以包含外部資源的參考,例如 DTD 檔案。 根據預設,外部資源會使用 XmlUrlResolver 沒有使用者認證的 物件來解析。 您可以執行下列其中一項來進一步保護此專案:

  • XML 數據可以包含大量的屬性、命名空間宣告、巢狀專案等等,需要大量的的時間來處理。 若要限制傳送至 XmlTextReader 的輸入大小,請建立自訂的 IStream 實作並將其提供給 XmlTextReader

  • ReadValueChunk 方法可用來處理大型數據流。 這個方法會一次讀取少量字元,而不是為整個值配置單一字串。

  • 根據預設,一般實體不會展開。 當您呼叫 ResolveEntity 方法時,會展開一般實體。