Přístup k atributům v modelu DOM

Atributy jsou vlastnosti elementu, nikoli podřízené položky elementu. Toto rozlišení je důležité kvůli metodám používaným k navigaci na stejné úrovni, nadřazené a podřízené uzly modelu DOM (Document Object Model) XML. Například metody PreviousSibling a NextSibling se nepoužívají k navigaci z elementu na atribut nebo mezi atributy. Místo toho atribut je vlastnost elementu a je vlastněna elementem, má OwnerElement vlastnost, nikoli parentNode vlastnost a má odlišné metody navigace.

Pokud je aktuální uzel element, pomocí HasAttribute metoda zjistit, zda existují nějaké atributy přidružené k elementu. Jakmile je známo, že prvek má atributy, existuje více metod pro přístup k atributům. K načtení jednoho atributu z elementu můžete použít GetAttribute a GetAttributeNode metody XmlElement nebo můžete získat všechny atributy do kolekce. Získání kolekce je užitečné, pokud potřebujete iterovat kolekci. Pokud chcete všechny atributy z elementu, použijte Attributes vlastnost elementu k načtení všech atributů do kolekce.

Načtení všech atributů do kolekce

Chcete-li všechny atributy uzlu elementu vložit do kolekce, zavolejte XmlElement.Attributes vlastnost. Tím se získá XmlAttributeCollection , který obsahuje všechny atributy elementu. XmlAttributeCollection třída dědí z XmlNamedNode map. Proto metody a vlastnosti dostupné v kolekci zahrnují ty, které jsou k dispozici na mapě pojmenovaného uzlu kromě metod a vlastností specifických pro XmlAttributeCollection třídy, jako je ItemOf vlastnost nebo Append metoda. Každá položka v kolekci atributů představuje uzel XmlAttribute . Pokud chcete zjistit počet atributů v elementu, získejte XmlAttributeCollection a pomocí Count vlastnost zjistit, kolik xmlAttribute uzlů jsou v kolekci.

Následující příklad kódu ukazuje, jak načíst kolekci atributů a pomocí metody Count pro index smyčky iterovat nad ním. Kód pak ukazuje, jak načíst jeden atribut z kolekce a zobrazit jeho hodnotu.

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

    }
}

Tento příklad zobrazí následující výstup:

Výstup

Zobrazí všechny atributy v kolekci.

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

Informace v kolekci atributů lze načíst podle názvu nebo čísla indexu. Výše uvedený příklad ukazuje, jak načíst data podle názvu. Další příklad ukazuje, jak načíst data podle čísla indexu.

Protože XmlAttributeCollection je kolekce a může být iterated podle názvu nebo indexu, tento příklad ukazuje výběr prvního atributu z kolekce pomocí indexu založeného na nule a pomocí následujícího souboru, baseuri.xml jako vstup.

Vstup

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

Načtení jednotlivého uzlu atributu

K načtení jednoho uzlu atributu z elementu XmlElement.GetAttributeNode se použije metoda. Vrátí objekt typu XmlAttribute. Jakmile budete mít XmlAttribute, všechny metody a vlastnosti dostupné ve System.Xml.XmlAttribute třídě jsou k dispozici pro tento objekt, například vyhledání 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);

    }
}

Můžete to také udělat, jak je znázorněno v předchozím příkladu, kde se z kolekce atributů načte jeden uzel atributu. Následující příklad kódu ukazuje, jak jeden řádek kódu lze zapsat k načtení jednoho atributu podle indexu číslo z kořene stromu dokumentu XML, označované také jako DocumentElement vlastnost.

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

Viz také