Lesen von Attributen mit dem "XmlReader"

Attribute sind in drei Knotentypen zulässig:

  • Element
  • XmlDeclaration
  • DocumentType-Deklaration

Bei einem Element unterscheidet sich die Bewegung durch die Attribute vom Lesen der Werte der Attribute in einer XmlDeclaration oder einer DocumentType-Deklaration.

Lesen von Attributen in Elementen

Ist der Reader in einem Elementknoten positioniert, können Sie mit den MoveToAttribute-Methoden durch die Attributliste des Elements navigieren. Nach dem Aufruf von MoveToAttribute geben die Knoteneigenschaften, z. B. Name, NamespaceURI, Prefix usw., die Eigenschaften dieses Attributs zurück, nicht die des Elements, in dem sie enthalten sind.

Ein Attribut muss nicht immer für ein Element angegeben werden. Eine DTD oder ein Schema kann einen Standardwert für Attribute in Elementen definieren. Wenn beispielsweise <!ATTLIST e a CDATA "123"> in der DTD enthalten ist, wird dem Attribut "a" von Element "e" der Wert "123" zugewiesen, wenn das "a" von Element "e" nicht im XML-Dokument definiert ist. Bei der Verwendung von Methoden, die durch Attribute navigieren, werden Attribute, deren Werte aus einer DTD oder einem Schema abgerufen werden, wie Attribute behandelt, die im XML-Datenstrom einen Wert erhalten. Sie können programmgesteuert feststellen, wie das Attribut seinen Wert erhalten hat: durch Verwenden der IsDefault-Eigenschaft. Die IsDefault-Eigenschaft gibt true zurück, wenn der aktuelle Knoten ein Attribut ist und das Attribut nicht im XML-Datenstrom angegeben wurde, sondern aus der Standardattributdeklaration in der DTD stammt.

Hinweis   Je nach dem Typ des verwendeten Readers ist diese Eigenschaft nicht immer anwendbar.

Die folgende Tabelle zeigt, welche Werte die IsDefault-Eigenschaft zurückgeben kann.

XmlReader-Implementierung Rückgabewerte
XmlTextReader false, da keine DTD-Informationen vorhanden sind.
XmlValidatingReader true, wenn der aktuelle Knoten ein Attribut ist, dessen Wert aus dem Standardwert generiert wurde, der in der DTD oder im Schema definiert ist; false, wenn der Wert des Attributs im XML-Datenstrom explizit angegeben wurde.
XmlNodeReader true, wenn die DTD in XmlDocument definiert ist, andernfalls false.
XsltReader false, da im XPath-Datenmodell keine DTD-Informationen (DOCTYPE-Knoten) offen gelegt werden.

Bei Positionierung in einem Attribut wird die GetAttribute-Methode verwendet, um den Wert des Attributs abzurufen.

Attribute in anderen Knotentypen

Der XmlTextReader und der XmlValidatingReader legen Attribute nur in Element-, XmlDeclaration- und DocumentType-Knoten offen. Bei der Implementierung von XmlReader-Klassen werden für den XmlDeclaration-Knotentyp die Version-, die Standalone- und die Encoding-Eigenschaft als Zeichenfolge in der Value-Eigenschaft der XmlDeclaration zurückgegeben. Die Value-Eigenschaft kann nicht als string.Empty zurückgegeben werden. Wenn sie leer ist, können die XmlDocument-DOM-Klasse und andere Klassen, die u. U. von diesen Informationen abhängen, nicht aus dem XmlReader geladen werden.

Siehe auch

Lesen von XML mit dem "XmlReader" | Aktuelle Knotenposition in "XmlReader" | Eigenschafteneinstellungen für "XmlReader" | Objektvergleich mit "XmlNameTable" in "XmlReader" | Lesen von Element- und Attributinhalten | Überspringen von Inhalten mit "XmlReader" | Lesen und Erweitern von "EntityReference" | Vergleichen von "XmlReader" und SAX-Reader | Lesen von XML-Daten mit "XmlTextReader" | Lesen von Strukturknoten mit dem "XmlNodeReader" | Überprüfen von XML mit "XmlValidatingReader" | Erstellen eines benutzerdefinierten XML-Readers | XmlReader-Klasse | XmlReader-Member | XmlNodeReader-Klasse | XmlNodeReader-Member | XmlTextReader-Klasse | XmlTextReader-Member | XmlValidatingReader-Klasse | XmlValidatingReader-Member