Toegang tot kenmerken in de DOM
Kenmerken zijn eigenschappen van het element, niet onderliggende elementen van het element. Dit onderscheid is belangrijk vanwege de methoden die worden gebruikt om door knooppunten op hetzelfde niveau, bovenliggende en onderliggende knooppunten van het XML Document Object Model (DOM) te navigeren. De methoden PreviousSibling en NextSibling worden bijvoorbeeld niet gebruikt om van een element naar een kenmerk of tussen kenmerken te navigeren. In plaats daarvan is een kenmerk een eigenschap van een element en is het eigendom van een element, heeft een eigenschap OwnerElement en niet een parentNode-eigenschap en heeft verschillende navigatiemethoden.
Wanneer het huidige knooppunt een element is, gebruikt u de HasAttribute-methode om te zien of er kenmerken zijn gekoppeld aan het element. Zodra het bekend is dat een element kenmerken heeft, zijn er meerdere methoden voor het openen van kenmerken. Als u één kenmerk uit het element wilt ophalen, kunt u de methoden GetAttribute en GetAttributeNode van het XmlElement gebruiken of alle kenmerken in een verzameling verkrijgen. Het verkrijgen van de verzameling is handig als u de verzameling wilt herhalen. Als u alle kenmerken van het element wilt, gebruikt u de eigenschap Kenmerken van het element om alle kenmerken op te halen in een verzameling.
Alle kenmerken ophalen in een verzameling
Als u alle kenmerken van een elementknooppunt in een verzameling wilt plaatsen, roept u de eigenschap XmlElement.Attributes aan. Hiermee haalt u de XmlAttributeCollection op die alle kenmerken van een element bevat. De klasse XmlAttributeCollection neemt de xmlNamedNode-toewijzing over. Daarom bevatten de methoden en eigenschappen die beschikbaar zijn voor de verzameling de methoden en eigenschappen die beschikbaar zijn op een benoemde knooppunttoewijzing, naast methoden en eigenschappen die specifiek zijn voor de klasse XmlAttributeCollection, zoals de eigenschap ItemOf of de methode Toevoegen. Elk item in de kenmerkverzameling vertegenwoordigt een XmlAttribute-knooppunt . Als u het aantal kenmerken voor een element wilt vinden, haalt u de XmlAttributeCollection op en gebruikt u de eigenschap Count om te zien hoeveel XmlAttribute-knooppunten zich in de verzameling bevinden.
In het volgende codevoorbeeld ziet u hoe u een kenmerkverzameling ophaalt en, met behulp van de methode Count voor de lusindex, deze herhalen. De code laat vervolgens zien hoe u één kenmerk ophaalt uit de verzameling en de bijbehorende waarde weergeeft.
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 dit voorbeeld wordt de volgende uitvoer weergegeven:
Uitvoer
Alle kenmerken in de verzameling weergeven.
genre = novel
ISBN = 1-861001-57-5
misc = sale item
Display the attribute information.
sale item
De informatie in een kenmerkverzameling kan worden opgehaald op naam of indexnummer. In het bovenstaande voorbeeld ziet u hoe u gegevens op naam ophaalt. In het volgende voorbeeld ziet u hoe u gegevens op indexnummer ophaalt.
Omdat xmlAttributeCollection een verzameling is en kan worden herhalen op naam of index, toont dit voorbeeld het selecteren van het eerste kenmerk uit de verzameling met behulp van een op nul gebaseerde index en het volgende bestand, baseuri.xml, als invoer.
Invoer
<!-- 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);
}
}
Een afzonderlijk kenmerkknooppunt ophalen
Als u één kenmerkknooppunt wilt ophalen uit een element, wordt de XmlElement.GetAttributeNode methode gebruikt. Het retourneert een object van het type XmlAttribute. Zodra u een XmlAttribute hebt, zijn alle methoden en eigenschappen die beschikbaar zijn in de System.Xml.XmlAttribute klasse beschikbaar op dat object, zoals het vinden van het 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);
}
}
U kunt ook doen zoals wordt weergegeven in het vorige voorbeeld, waarbij één kenmerkknooppunt wordt opgehaald uit de kenmerkverzameling. In het volgende codevoorbeeld ziet u hoe één regel code kan worden geschreven om één kenmerk op te halen op basis van het indexnummer uit de hoofdmap van de XML-documentstructuur, ook wel bekend als de eigenschap DocumentElement .
XmlAttribute attr = doc.DocumentElement.Attributes[0];