Dela via


Åtkomst till attribut i DOM

Attribut är egenskaper för elementet, inte underordnade elementet. Den här skillnaden är viktig på grund av de metoder som används för att navigera i syskon-, över- och underordnade noder i XML-dokumentobjektmodellen (DOM). Metoderna PreviousSibling och NextSibling används till exempel inte för att navigera från ett element till ett attribut eller mellan attribut. I stället är ett attribut en egenskap för ett element och ägs av ett element, har egenskapen OwnerElement och inte en parentNode-egenskap och har distinkta navigeringsmetoder.

När den aktuella noden är ett element använder du metoden HasAttribute för att se om det finns några attribut som är associerade med elementet. När det är känt att ett element har attribut finns det flera metoder för att komma åt attribut. Om du vill hämta ett enda attribut från elementet kan du använda metoderna GetAttribute och GetAttributeNode i XmlElement eller hämta alla attribut till en samling. Det är användbart att hämta samlingen om du behöver iterera över samlingen. Om du vill ha alla attribut från elementet använder du egenskapen Attribut för elementet för att hämta alla attribut till en samling.

Hämta alla attribut till en samling

Om du vill att alla attribut för en elementnod ska placeras i en samling anropar du egenskapen XmlElement.Attributes . Då hämtas XmlAttributeCollection som innehåller alla attribut för ett element. Klassen XmlAttributeCollection ärver från XmlNamedNode-kartan . Därför innehåller de metoder och egenskaper som är tillgängliga i samlingen de som är tillgängliga på en namngiven nodkarta utöver metoder och egenskaper som är specifika för klassen XmlAttributeCollection, till exempel egenskapen ItemOf eller append-metoden. Varje objekt i attributsamlingen representerar en XmlAttribute-nod . Om du vill hitta antalet attribut för ett element hämtar du XmlAttributeCollection och använder egenskapen Count för att se hur många XmlAttribute-noder som finns i samlingen.

I följande kodexempel visas hur du hämtar en attributsamling och itererar över den med metoden Antal för loopningsindexet. Koden visar sedan hur du hämtar ett enda attribut från samlingen och visar dess värde.

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

    }
}

I det här exemplet visas följande utdata:

Output

Visa alla attribut i samlingen.

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

Informationen i en attributsamling kan hämtas med namn eller indexnummer. Exemplet ovan visar hur du hämtar data med namn. I nästa exempel visas hur du hämtar data efter indexnummer.

Eftersom XmlAttributeCollection är en samling och kan itereras över efter namn eller index, visar det här exemplet att välja det första attributet ur samlingen med hjälp av ett nollbaserat index och använda följande fil, baseuri.xml, som indata.

Indata

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

Hämtar en enskild attributnod

Metoden används för att hämta en enskild attributnod från ett element XmlElement.GetAttributeNode . Det returnerar ett objekt av typen XmlAttribute. När du har en XmlAttribute är alla metoder och egenskaper som är tillgängliga i System.Xml.XmlAttribute klassen tillgängliga för objektet, till exempel att hitta 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);

    }
}

Du kan också göra som du ser i föregående exempel, där en enda attributnod hämtas från attributsamlingen. I följande kodexempel visas hur en kodrad kan skrivas för att hämta ett enda attribut efter indexnummer från roten i XML-dokumentträdet, även kallat egenskapen DocumentElement .

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

Se även