本文提供此 API 參考文件的補充備註。
備註
建議您使用 XmlReader 方法來建立XmlReader.Create實例,以利用新功能。
XmlTextReader 提供 XML 數據流的正向唯讀存取權。 目前的節點是指讀取器所在的節點。 讀取器會使用任何讀取方法和屬性來進階,以反映目前節點的值。
這個類別會實作 XmlReader 並符合 W3C 可延伸標記語言 (XML) 1.0 和 XML 建議中的命名空間。
XmlTextReader
提供下列功能:
強制執行格式正確的 XML 規則。
XmlTextReader
不提供數據驗證。檢查
DocumentType
節點是否格式正確。XmlTextReader
會檢查 DTD 的格式是否正確,但不會使用 DTD 進行驗證。對於NodeType 為
XmlNodeType.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 沒有使用者認證的 物件來解析。 您可以執行下列其中一項來進一步保護此專案:
將 XmlTextReader 屬性設定為 XmlResolver 物件,以限制 XmlSecureResolver 可以存取的資源。
不允許 XmlReader 藉由將 XmlResolver 屬性設定為
null
來開啟任何外部資源。
XML 數據可以包含大量的屬性、命名空間宣告、巢狀專案等等,需要大量的的時間來處理。 若要限制傳送至 XmlTextReader 的輸入大小,請建立自訂的 IStream 實作並將其提供給 XmlTextReader。
ReadValueChunk 方法可用來處理大型數據流。 這個方法會一次讀取少量字元,而不是為整個值配置單一字串。
根據預設,一般實體不會展開。 當您呼叫 ResolveEntity 方法時,會展開一般實體。