Uzyskiwanie dostępu do atrybutów w modelu DOMAccessing Attributes in the DOM

Atrybuty są właściwościami elementu, a nie elementem podrzędnym elementu.Attributes are properties of the element, not children of the element. Ta różnica jest ważna ze względu na metody używane do nawigowania w węzłach elementów równorzędnych, nadrzędnych i podrzędnych Document Object Model XML (DOM).This distinction is important because of the methods used to navigate sibling, parent, and child nodes of the XML Document Object Model (DOM). Na przykład metody PreviousSibling i NextSibling nie są używane do nawigowania po elemencie do atrybutu lub między atrybutami.For example, the PreviousSibling and NextSibling methods are not used to navigate from an element to an attribute or between attributes. Zamiast tego atrybut jest właściwością elementu i jest własnością elementu, ma właściwość OwnerElement , a nie Właściwość ParentNode i ma odrębne metody nawigacji.Instead, an attribute is a property of an element and is owned by an element, has an OwnerElement property and not a parentNode property, and has distinct methods of navigation.

Gdy bieżącym węzłem jest element, użyj metody HasAttribute , aby sprawdzić, czy istnieją atrybuty skojarzone z elementem.When the current node is an element, use the HasAttribute method to see if there are any attributes associated with the element. Gdy wiadomo, że element ma atrybuty, istnieje wiele metod uzyskiwania dostępu do atrybutów.Once it is known that an element has attributes, there are multiple methods for accessing attributes. Aby pobrać pojedynczy atrybut z elementu, można użyć metody GetAttribute i GetAttributeNode w elemencie XmlElement lub można uzyskać wszystkie atrybuty do kolekcji.To retrieve a single attribute from the element, you can use the GetAttribute and GetAttributeNode methods of the XmlElement or you can obtain all the attributes into a collection. Uzyskanie kolekcji jest przydatne, jeśli trzeba wykonać iterację w kolekcji.Obtaining the collection is useful if you need to iterate over the collection. Jeśli chcesz uzyskać wszystkie atrybuty z elementu, użyj właściwości atrybuty elementu, aby pobrać wszystkie atrybuty do kolekcji.If you want all attributes from the element, use the Attributes property of the element to retrieve all the attributes into a collection.

Pobieranie wszystkich atrybutów do kolekcjiRetrieving All Attributes into a Collection

Jeśli chcesz, aby wszystkie atrybuty węzła elementu zostały umieszczone w kolekcji, wywołaj Właściwość XmlElement. Attributes .If you want all the attributes of an element node put into a collection, call the XmlElement.Attributes property. Spowoduje to pobranie XmlAttributeCollection , który zawiera wszystkie atrybuty elementu.This gets the XmlAttributeCollection that contains all the attributes of an element. Klasa XmlAttributeCollection dziedziczy z mapy XmlNamedNode .The XmlAttributeCollection class inherits from the XmlNamedNode map. W związku z tym metody i właściwości dostępne w kolekcji obejmują te, które są dostępne na mapie nazwanych węzłów, a także metody i właściwości specyficzne dla klasy XmlAttributeCollection , takie jak Właściwość ItemOf lub metoda append .Therefore, the methods and properties available on the collection include those available on a named node map in addition to methods and properties specific to the XmlAttributeCollection class, such as the ItemOf property or the Append method. Każdy element w kolekcji atrybutów reprezentuje węzeł XmlAttribute .Each item in the attribute collection represents an XmlAttribute node. Aby znaleźć liczbę atrybutów dla elementu, należy pobrać XmlAttributeCollection i użyć właściwości Count , aby zobaczyć, ile węzłów XmlAttribute znajduje się w kolekcji.To find the number of attributes on an element, get the XmlAttributeCollection, and use the Count property to see how many XmlAttribute nodes are in the collection.

Poniższy przykład kodu przedstawia sposób pobierania kolekcji atrybutów i, przy użyciu metody Count dla indeksu pętli, iteracji nad nim.The following code example shows how to retrieve an attribute collection and, using the Count method for the looping index, iterate over it. Następnie kod pokazuje, jak pobrać pojedynczy atrybut z kolekcji i wyświetlić jego wartość.The code then shows how to retrieve a single attribute from the collection and display its value.

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);

    }
}

W tym przykładzie są wyświetlane następujące dane wyjściowe:This example displays the following output:

Dane wyjścioweOutput

Wyświetl wszystkie atrybuty w kolekcji.Display all the attributes in the collection.

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

Informacje w kolekcji atrybutów można pobrać według nazwy lub numeru indeksu.The information in an attribute collection can be retrieved by name or index number. Powyższy przykład pokazuje, jak pobrać dane według nazwy.The example above shows how to retrieve data by name. W następnym przykładzie pokazano, jak pobrać dane według numeru indeksu.The next example shows how to retrieve data by index number.

Ponieważ XmlAttributeCollection jest kolekcją i można ją powtórzyć według nazwy lub indeksu, w tym przykładzie pokazano, jak wybrać pierwszy atrybut z kolekcji przy użyciu indeksu na podstawie zera i przy użyciu następującego pliku, baseuri.xml jako dane wejściowe.Because the XmlAttributeCollection is a collection and can be iterated over by name or index, this example shows selecting the first attribute out of the collection using a zero-based index and using the following file, baseuri.xml, as input.

Dane wejścioweInput

<!-- 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);
  }
}

Pobieranie pojedynczego węzła atrybutuRetrieving an Individual Attribute Node

Aby pobrać pojedynczy węzeł atrybutu z elementu, XmlElement.GetAttributeNode używana jest metoda.To retrieve a single attribute node from an element, the XmlElement.GetAttributeNode method is used. Zwraca obiekt typu XmlAttribute.It returns an object of type XmlAttribute. Po utworzeniu elementu XmlAttribute wszystkie metody i właściwości dostępne w System.Xml.XmlAttribute klasie są dostępne dla tego obiektu, takich jak znalezienie elementu OwnerElement.Once you have an XmlAttribute, all the methods and properties available in the System.Xml.XmlAttribute class are available on that object, such as finding the OwnerElement.

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);

    }
}

Można również jak pokazano w poprzednim przykładzie, gdzie jeden węzeł atrybutu jest pobierany z kolekcji atrybutów.You can also do as shown in the previous example, where a single attribute node is retrieved from the attribute collection. Poniższy przykład kodu pokazuje, jak można napisać jeden wiersz kodu w celu pobrania pojedynczego atrybutu według numeru indeksu z katalogu głównego drzewa dokumentu XML, znanego również jako właściwość DocumentElement .The following code example shows how one line of code can be written to retrieve a single attribute by index number from the root of the XML document tree, also known as the DocumentElement property.

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

Zobacz teżSee also