使用 XmlReader 讀取屬性
屬性在下列三種節點類型中是被允許的:
- Element
- XmlDeclaration
- DocumentType 宣告
對於項目而言,透過屬性的移動是不同於讀取 XmlDeclaration 或 DocumentType 宣告中的屬性值。
讀取項目的屬性
當位於 element 節點中時,MoveToAttribute 方法允許您使用項目的屬性清單。MoveToAttribute 被呼叫之後,節點屬性 (例如 Name、NamespaceURI、Prefix 等等) 會反映它的屬性,而不是它包含的項目。
屬性並不需要總是在項目中指定。DTD 或結構描述可以定義項目中屬性的預設值。例如,如果 <!ATTLIST e a CDATA "123">
在 DTD 中,當項目「e
」中的屬性「a
」沒有在 XML 文件中定義時,項目「e
」的屬性「a
」會被指派成「123」的值。當使用在屬性之間移動的方法時,從 DTD 或結構描述中接收值的屬性就會像在 XML 資料流中給定值的屬性。有一種程式設計的方法可以決定屬性如何接收值,也就是利用 IsDefault 屬性。IsDefault 屬性會傳回 true,如果目前的節點是屬性,而且屬性並未在 XML 資料流中定義,而是來自 DTD 中的預設屬性宣告。
注意 根據使用讀取器的類型而有不,這個屬性並不總是適用。
下列表格顯示 IsDefault 屬性可以傳回的值。
XmlReader 實作 | 傳回值 |
---|---|
XmlTextReader | false,因為在此沒有 DTD 資訊。 |
XmlValidatingReader | 如果目前節點是屬性,而它的值是由 DTD 或結構描述中定義的預設值所產生,則傳回 true。如果屬性值明確的在 XML 資料流中指定,則傳回 false。 |
XmlNodeReader | 如果 DTD 在 XmlDocument 中定義,則傳回 true。其他情形則傳回 false。 |
XsltReader | false,因為在 XPath 資料模型中沒有公開 DTD 資訊 (DOCTYPE 節點)。 |
當位於屬性時,GetAttribute 方法用來擷取屬性值。
其他節點類型的屬性
XmlTextReader 和 XmlValidatingReader 只會在 Element、XmlDeclaration 和 DocumentType 節點中公開屬性。實作 XmlReader 類別時,對於 XmlDeclaration 節點類型來說,Version、Standalone 和 Encoding 屬性會以 XmlDeclaration 的 Value 屬性字串傳回。Value 屬性無法當做 string.Empty 傳回。如果它是空的,XmlDocument DOM 類別與其他可能依據這個資訊的類別無法從 XmlReader 載入。
請參閱
使用 XmlReader 讀取 XML | XmlReader 中目前節點位置 | XmlReader 上的屬性設定 | 使用 XmlNameTable 和 XmlReader 來比較物件 | 讀取項目和屬性內容 | 使用 XmlReader 略過內容 | EntityReference 讀取和展開 | 比較 XmlReader 和 SAX 讀取器 | 使用 XmlTextReader 讀取 XML 資料 | 使用 XmlNodeReader 讀取節點樹狀結構 | 使用 XmlValidatingReader 驗證 XML | 自訂的 XML 讀取器建立 | XmlReader 類別 | XmlReader 成員 | XmlNodeReader 類別 | XmlNodeReader 成員 | XmlTextReader 類別 | XmlTextReader 成員 | XmlValidatingReader 類別 | XmlValidatingReader 成員