Freigeben über


Zugreifen auf Attribute im DOM

Attribute sind Eigenschaften des Elements und keine untergeordneten Elemente des entsprechenden Elements. Diese Unterscheidung ist aufgrund der Methoden wichtig, die zum Navigieren in Nachbar-, übergeordneten und untergeordneten Knoten des XML-Dokumentobjektmodells (DOM) verwendet werden. Die Methoden PreviousSibling und NextSibling werden beispielsweise nicht verwendet, um von einem Element zu einem Attribut oder zwischen Attributen zu navigieren. Stattdessen ist ein Attribut eine Eigenschaft eines Elements und gehört zu einem Element, hat eine OwnerElement-Eigenschaft und keine parentNode-Eigenschaft und weist unterschiedliche Navigationsmethoden auf.

Wenn der aktuelle Knoten ein Element ist, verwenden Sie die HasAttribute-Methode , um festzustellen, ob dem Element Attribute zugeordnet sind. Sobald bekannt ist, dass ein Element Attribute aufweist, gibt es mehrere Methoden für den Zugriff auf Attribute. Um ein einzelnes Attribut aus dem Element abzurufen, können Sie die Methoden "GetAttribute " und "GetAttributeNode " des XmlElement verwenden oder alle Attribute in einer Auflistung abrufen. Es ist hilfreich, eine Auflistung abzurufen, wenn Sie die Auflistung durchlaufen müssen. Wenn Sie alle Attribute aus dem Element verwenden möchten, verwenden Sie die Attributes-Eigenschaft des Elements, um alle Attribute in einer Auflistung abzurufen.

Abfragen aller Attribute in einer Auflistung

Wenn alle Attribute eines Elementknotens in eine Auflistung eingefügt werden sollen, rufen Sie die XmlElement.Attributes-Eigenschaft auf. Es wird die XmlAttributeCollection abgerufen, die alle Attribute eines Elements enthält. Die XmlAttributeCollection-Klasse erbt von der XmlNamedNode-Zuordnung. Daher umfassen die in der Auflistung verfügbaren Methoden und Eigenschaften sowohl die für die Klasse XmlAttributeCollection spezifischen Methoden und Eigenschaften, wie die ItemOf-Eigenschaft oder die Append-Methode, als auch die auf einem benannten Knotennetz verfügbaren Methoden und Eigenschaften. Jedes Element in der Attributauflistung stellt einen XmlAttribute-Knoten dar. Um die Anzahl der Attribute für ein Element zu ermitteln, rufen Sie die XmlAttributeCollection ab, und verwenden Sie die Count-Eigenschaft , um zu sehen, wie viele XmlAttribute-Knoten in der Auflistung vorhanden sind.

Im folgenden Codebeispiel wird gezeigt, wie Sie eine Attributsammlung abrufen und die Count-Methode verwenden, um damit über den Schleifenindex zu iterieren. Der Code zeigt dann, wie sie ein einzelnes Attribut aus der Auflistung abrufen und dessen Wert anzeigen.

Imports System.IO
Imports System.Xml

Public Class Sample

    Public Shared Sub Main()

        Dim doc As XmlDocument = New XmlDocument()
        doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5' misc='sale item'>" & _
               "<title>The Handmaid's Tale</title>" & _
               "<price>14.95</price>" & _
               "</book>")

        ' Move to an element.
        Dim myElement As XmlElement = doc.DocumentElement

        ' Create an attribute collection from the element.
        Dim attrColl As XmlAttributeCollection = myElement.Attributes

        ' Show the collection by iterating over it.
        Console.WriteLine("Display all the attributes in the collection...")
        Dim i As Integer
        For i = 0 To attrColl.Count - 1
            Console.Write("{0} = ", attrColl.ItemOf(i).Name)
            Console.Write("{0}", attrColl.ItemOf(i).Value)
            Console.WriteLine()
        Next

        ' Retrieve a single attribute from the collection; specifically, the
        ' attribute with the name "misc".
        Dim attr As XmlAttribute = attrColl("misc")

        ' Retrieve the value from that attribute.
        Dim miscValue As String = attr.InnerXml

        Console.WriteLine("Display the attribute information.")
        Console.WriteLine(miscValue)

    End Sub
End Class
using System;
using System.IO;
using System.Xml;

public class Sample
{

    public static void Main()
    {
        XmlDocument doc = new XmlDocument();
        doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5' misc='sale item'>" +
                      "<title>The Handmaid's Tale</title>" +
                      "<price>14.95</price>" +
                      "</book>");

        // Move to an element.
        XmlElement myElement = doc.DocumentElement;

        // Create an attribute collection from the element.
        XmlAttributeCollection attrColl = myElement.Attributes;

        // Show the collection by iterating over it.
        Console.WriteLine("Display all the attributes in the collection...");
        for (int i = 0; i < attrColl.Count; i++)
        {
            Console.Write("{0} = ", attrColl[i].Name);
            Console.Write("{0}", attrColl[i].Value);
            Console.WriteLine();
        }

        // Retrieve a single attribute from the collection; specifically, the
        // attribute with the name "misc".
        XmlAttribute attr = attrColl["misc"];

        // Retrieve the value from that attribute.
        String miscValue = attr.InnerXml;

        Console.WriteLine("Display the attribute information.");
        Console.WriteLine(miscValue);

    }
}

In diesem Beispiel wird die folgende Ausgabe dargestellt:

Ausgabe

Zeigt alle Attribute in der Auflistung an.

genre = novel
ISBN = 1-861001-57-5
misc = sale item
Display the attribute information.
sale item

Die Informationen in einer Attributauflistung können anhand des Namens oder der Indexnummer abgerufen werden. Im obigen Beispiel wird gezeigt, wie Daten anhand des Namens abgerufen werden. Das nächste Beispiel zeigt, wie Daten nach Indexnummer abgerufen werden.

Da es sich bei der XmlAttributeCollection um eine Auflistung handelt und nach Name oder Index durchlaufen werden kann, zeigt dieses Beispiel, dass das erste Attribut aus der Auflistung mithilfe eines nullbasierten Indexes ausgewählt und die folgende Datei baseuri.xmlals Eingabe verwendet wird.

Eingabe

<!-- XML fragment -->
<book genre="novel">
  <title>Pride And Prejudice</title>
</book>
Option Explicit On
Option Strict On

Imports System.IO
Imports System.Xml

Public Class Sample

    Public Shared Sub Main()
        ' Create the XmlDocument.
        Dim doc As New XmlDocument()
        doc.Load("http://localhost/baseuri.xml")

        ' Display information on the attribute node. The value
        ' returned for BaseURI is 'http://localhost/baseuri.xml'.
        Dim attr As XmlAttribute = doc.DocumentElement.Attributes(0)
        Console.WriteLine("Name of the attribute:  {0}", attr.Name)
        Console.WriteLine("Base URI of the attribute:  {0}", attr.BaseURI)
        Console.WriteLine("The value of the attribute:  {0}", attr.InnerText)
    End Sub 'Main
End Class 'Sample
using System;
using System.IO;
using System.Xml;

public class Sample
{
  public static void Main()
  {
    // Create the XmlDocument.
    XmlDocument doc = new XmlDocument();

    doc.Load("http://localhost/baseuri.xml");

    // Display information on the attribute node. The value
    // returned for BaseURI is 'http://localhost/baseuri.xml'.
    XmlAttribute attr = doc.DocumentElement.Attributes[0];
    Console.WriteLine("Name of the attribute:  {0}", attr.Name);
    Console.WriteLine("Base URI of the attribute:  {0}", attr.BaseURI);
    Console.WriteLine("The value of the attribute:  {0}", attr.InnerText);
  }
}

Abrufen eines einzelnen Attributknotens

Zum Abrufen eines einzelnen Attributknotens aus einem Element wird die XmlElement.GetAttributeNode Methode verwendet. Es gibt ein Objekt vom Typ "XmlAttribute" zurück. Sobald Sie über ein XmlAttribute verfügen, sind alle in der System.Xml.XmlAttribute Klasse verfügbaren Methoden und Eigenschaften für dieses Objekt verfügbar, z. B. das Suchen des OwnerElements.

Imports System.IO
Imports System.Xml

Public Class Sample

    Public Shared Sub Main()

        Dim doc As XmlDocument = New XmlDocument()
        doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5' misc='sale item'>" & _
               "<title>The Handmaid's Tale</title>" & _
               "<price>14.95</price>" & _
               "</book>")

        ' Move to an element.
        Dim root As XmlElement
        root = doc.DocumentElement

        ' Get an attribute.
        Dim attr As XmlAttribute
        attr = root.GetAttributeNode("ISBN")

        ' Display the value of the attribute.
        Dim attrValue As String
        attrValue = attr.InnerXml
        Console.WriteLine(attrValue)

    End Sub
End Class
using System;
using System.IO;
using System.Xml;

 public class Sample
 {
      public static void Main()
      {
    XmlDocument doc = new XmlDocument();
     doc.LoadXml("<book genre='novel' ISBN='1-861003-78' misc='sale item'>" +
                   "<title>The Handmaid's Tale</title>" +
                   "<price>14.95</price>" +
                   "</book>");

    // Move to an element.
     XmlElement root = doc.DocumentElement;

    // Get an attribute.
     XmlAttribute attr = root.GetAttributeNode("ISBN");

    // Display the value of the attribute.
     String attrValue = attr.InnerXml;
     Console.WriteLine(attrValue);

    }
}

Sie können auch wie im vorherigen Beispiel gezeigt tun, wo ein einzelner Attributknoten aus der Attributauflistung abgerufen wird. Das folgende Codebeispiel zeigt, wie eine Codezeile geschrieben werden kann, um ein einzelnes Attribut nach Indexnummer aus dem Stamm der XML-Dokumentstruktur abzurufen, auch als DocumentElement-Eigenschaft bezeichnet.

XmlAttribute attr = doc.DocumentElement.Attributes[0];

Siehe auch