Delen via


Niet-geordende knooppunt ophalen op naam of index

De XmlNamedNodeMap wordt beschreven in de W3C-specificatie (World Wide Web Consortium) als namedNodeMap en is vereist voor het afhandelen van een niet-geordende set knooppunten met de mogelijkheid om naar knooppunten te verwijzen op basis van hun naam of index. De enige manier waarop u toegang hebt tot een XmlNamedNodeMap is wanneer een XmlNamedNodeMap wordt geretourneerd via een methode of eigenschap. Er zijn drie methoden of eigenschappen die een XmlNamedNodeMap retourneren:

  • XmlElement.Attributes

  • XmlDocumentType.Entities

  • XmlDocumentType.Notations

De eigenschap XmlDocumentType.Entities haalt bijvoorbeeld de verzameling XmlEntity-knooppunten op die zijn gedeclareerd in de declaratie van het documenttype. Deze verzameling wordt geretourneerd als een XmlNamedNodeMap en u kunt de verzameling herhalen met behulp van de eigenschap Count en entiteitsgegevens weergeven. Zie voor een voorbeeld van het doorlopen van een XmlNamedNodeMapEntities.

De XmlAttributeCollection is afgeleid van XmlNamedNodeMap en alleen kenmerken kunnen worden gewijzigd, terwijl notaties en entiteiten alleen-lezen zijn. Met behulp van de XmlNamedNodeMap voor de kenmerken kunt u knooppunten voor deze kenmerken ophalen op basis van hun XML-namen. Dit biedt een eenvoudige methode voor het bewerken van de verzameling kenmerken op een elementknooppunt. Dit kan rechtstreeks worden vergeleken met XmlNodeList, waarmee ook de IEnumerable-interface wordt geïmplementeerd, maar met een indextoegangsfunctie in plaats van een tekenreeks. De methoden RemoveNamedItem en SetNamedItem worden alleen gebruikt voor een XmlAttributeCollection. Als u een kenmerkverzameling toevoegt of verwijdert, wijzigt u de kenmerkverzameling op het element, ongeacht of u de attributeCollection of de xmlNamedNodeMap-implementatie gebruikt. In het volgende codevoorbeeld ziet u hoe u een kenmerk verplaatst en een nieuw kenmerk maakt.

Imports System  
Imports System.Xml  
  
Class test  
  
    Public Shared Sub Main()  
        Dim doc As New XmlDocument()  
        doc.LoadXml("<root> <child1 attr1='val1' attr2='val2'> text1 </child1> <child2 attr3='val3'> text2 </child2> </root> ")  
  
        ' Get the attributes of node "child2 "  
        Dim ac As XmlAttributeCollection = doc.DocumentElement.ChildNodes(1).Attributes  
  
        ' Print out the number of attributes and their names.  
        Console.WriteLine(("Number of Attributes: " + ac.Count))  
        Dim i As Integer  
        For i = 0 To ac.Count - 1  
            Console.WriteLine((i + 1 + ".  Attribute Name: '" + ac(i).Name + "'  Attribute Value:  '" + ac(i).Value + "'"))  
        Next i  
        ' Get the 'attr1' from child1.  
        Dim attr As XmlAttribute = doc.DocumentElement.ChildNodes(0).Attributes(0)  
  
        ' Add this attribute to the attributecollection "ac".  
        ac.SetNamedItem(attr)  
  
        ''attr1' will be removed from 'child1' and added to 'child2'.  
        ' Print out the number of attributes and their names.  
        Console.WriteLine(("Number of Attributes: " + ac.Count))  
  
        For i = 0 To ac.Count - 1  
            Console.WriteLine((i + 1 + ".  Attribute Name: '" + ac(i).Name + "'  Attribute Value:  '" + ac(i).Value + "'"))  
        Next i  
        ' Create a new attribute and add to the collection.  
        Dim attr2 As XmlAttribute = doc.CreateAttribute("attr4")  
        attr2.Value = "val4"  
        ac.SetNamedItem(attr2)  
  
        ' Print out the number of attributes and their names.  
        Console.WriteLine(("Number of Attributes: " + ac.Count))  
  
        For i = 0 To ac.Count - 1  
            Console.WriteLine((i + 1 + ".  Attribute Name: '" + ac(i).Name + "'  Attribute Value:  '" + ac(i).Value + "'"))  
        Next i  
    End Sub 'Main  
End Class 'test  
using System;  
using System.Xml;  
class test {  
    public static void Main() {  
        XmlDocument doc = new XmlDocument();  
        doc.LoadXml( "<root> <child1 attr1='val1' attr2='val2'> text1 </child1> <child2 attr3='val3'> text2 </child2> </root> " );  
  
        // Get the attributes of node "child2"  
        XmlAttributeCollection ac = doc.DocumentElement.ChildNodes[1].Attributes;  
  
        // Print out the number of attributes and their names.  
        Console.WriteLine( "Number of Attributes: "+ac.Count );  
        for( int i = 0; i < ac.Count; i++ )  
            Console.WriteLine( (i+1) + ".  Attribute Name: '" +ac[i].Name+ "'  Attribute Value:  '"+ ac[i].Value +"'" );
  
        // Get the 'attr1' from child1.  
        XmlAttribute attr = doc.DocumentElement.ChildNodes[0].Attributes[0];  
  
        // Add this attribute to the attributecollection "ac".  
        ac.SetNamedItem( attr );  
  
        // 'attr1' will be removed from 'child1' and added to 'child2'.  
        // Print out the number of attributes and their names.  
        Console.WriteLine( "Number of Attributes: "+ac.Count );
        for( int i = 0; i < ac.Count; i++ )  
            Console.WriteLine( (i+1) + ".  Attribute Name: '" +ac[i].Name+ "'  Attribute Value:  '"+ ac[i].Value +"'" );
  
        // Create a new attribute and add to the collection.  
        XmlAttribute attr2 = doc.CreateAttribute( "attr4" );  
        attr2.Value = "val4";  
        ac.SetNamedItem( attr2 );  
  
        // Print out the number of attributes and their names.  
        Console.WriteLine( "Number of Attributes: "+ac.Count );
        for( int i = 0; i < ac.Count; i++ )  
            Console.WriteLine( (i+1) + ".  Attribute Name: '" +ac[i].Name+ "'  Attribute Value:  '"+ ac[i].Value +"'" );
  
    }  
}  

Zie de methode XmlNamedNodeMap.RemoveNamedItem als u een extra codevoorbeeld wilt zien waarin een kenmerk wordt verwijderd uit een AttributeCollection. Zie XmlNamedNodeMap Members voor meer informatie over de methoden en eigenschappen.

Zie ook