Freigeben über


XmlValidatingReader.ReadAttributeValue-Methode

Löst den Attributwert in einen oder mehrere Text-Knoten, EntityReference-Knoten oder EndEntity-Knoten auf.

Namespace: System.Xml
Assembly: System.Xml (in system.xml.dll)

Syntax

'Declaration
Public Overrides Function ReadAttributeValue As Boolean
'Usage
Dim instance As XmlValidatingReader
Dim returnValue As Boolean

returnValue = instance.ReadAttributeValue
public override bool ReadAttributeValue ()
public:
virtual bool ReadAttributeValue () override
public boolean ReadAttributeValue ()
public override function ReadAttributeValue () : boolean

Rückgabewert

true, wenn zurückzugebende Knoten vorhanden sind. false, wenn der Reader beim ersten Aufruf nicht auf einem Atttributknoten positioniert ist oder alle Attributwerte gelesen wurden. Ein leeres Attribut, z. B. misc="", gibt true mit einem einzelnen Knoten mit dem Wert String.Empty zurück.

Hinweise

Hinweis

Die XmlValidatingReader-Klasse ist in Microsoft .NET Framework, Version 2.0 veraltet. Sie können eine Instanz eines validierenden XmlReader mithilfe der XmlReaderSettings-Klasse und der Create-Methode erstellen. Weitere Informationen finden Sie unter Validieren von XML-Daten mit "XmlReader".

Verwenden Sie diese Methode, um nach dem Aufruf von MoveToAttribute die Text- oder Entitätsverweisknoten zu lesen, aus denen der Attributwert besteht. Die Depth des Attributwertknotens ist eins plus der Tiefe des Attributknotens. Die Depth wird beim Einsprung bzw. beim Verlassen allgemeiner Entitätsverweise um eins inkrementiert bzw. dekrementiert.

Angenommen, bei dem folgenden XML-Code <test name="a &b; c"/>

ist die Entität b in der DTD (Dokumenttypdefinition) wie folgt definiert: <!ENTITY b "123">

Wenn EntityHandling auf ExpandCharEntities festgelegt ist, gibt der folgende C#-Code den Attributwert als zwei Textknoten und einen Entitätsverweisknoten zurück:

reader.MoveToAttribute("name");
  while (reader.ReadAttributeValue())
  {
  if (reader.NodeType == XmlNodeType.Text)
  {
  // at this point reader.Value == "a " or " c"
  }
  else if (reader.NodeType == XmlNodeType.EntityReference)
  {
  // at this point reader.Name == "b"
  reader.ResolveEntity();
  while (reader.ReadAttributeValue() &&
  reader.NodeType != XmlNodeType.EndEntity)
  {
  // reader.Value == "123"
  }
  }
    }

Beispiel

Im folgenden Beispiel wird ein Attribut mit Text- und Entitätsverweisknoten gelesen.

Option Strict
Option Explicit

Imports System
Imports System.IO
Imports System.Xml

Public Class Sample
    
    Public Shared Sub Main()
        Dim reader As XmlValidatingReader = Nothing
        
        Try
            'Create the XML fragment to be parsed.
            Dim xmlFrag As String = "<book genre='novel' misc='sale-item &h; 1987'></book>"
            
            'Create the XmlParserContext.
            Dim context As XmlParserContext
            Dim subset As String = "<!ENTITY h 'hardcover'>"
            context = New XmlParserContext(Nothing, Nothing, "book", Nothing, Nothing, subset, "", "", XmlSpace.None)
            
            'Create the reader and set it to not expand general entities. 
            reader = New XmlValidatingReader(xmlFrag, XmlNodeType.Element, context)
            reader.ValidationType = ValidationType.None
            reader.EntityHandling = EntityHandling.ExpandCharEntities
            
            'Read the misc attribute. Because EntityHandling is set to
            'ExpandCharEntities, the attribute is parsed into multiple text
            'and entity reference nodes.
            reader.MoveToContent()
            reader.MoveToAttribute("misc")
            While reader.ReadAttributeValue()
                If reader.NodeType = XmlNodeType.EntityReference Then
                    'To expand the entity, call ResolveEntity.
                    Console.WriteLine("{0} {1}", reader.NodeType, reader.Name)
                Else
                    Console.WriteLine("{0} {1}", reader.NodeType, reader.Value)
                End If
            End While
        Finally
            If Not (reader Is Nothing) Then
                reader.Close()
            End If
        End Try
    End Sub 'Main
End Class 'Sample 
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {
    XmlValidatingReader reader = null;

    try
    {
       //Create the XML fragment to be parsed.
       string xmlFrag ="<book genre='novel' misc='sale-item &h; 1987'></book>";

       //Create the XmlParserContext.
       XmlParserContext context;
       string subset = "<!ENTITY h 'hardcover'>";
       context = new XmlParserContext(null, null, "book", null, null, subset, "", "", XmlSpace.None);
        
       //Create the reader and set it to not expand general entities. 
       reader = new XmlValidatingReader(xmlFrag, XmlNodeType.Element, context);
       reader.ValidationType = ValidationType.None;
       reader.EntityHandling = EntityHandling.ExpandCharEntities;
  
       //Read the misc attribute. Because EntityHandling is set to
       //ExpandCharEntities, the attribute is parsed into multiple text
       //and entity reference nodes.
       reader.MoveToContent();
       reader.MoveToAttribute("misc");
       while (reader.ReadAttributeValue()){
          if (reader.NodeType==XmlNodeType.EntityReference)
            //To expand the entity, call ResolveEntity.
            Console.WriteLine("{0} {1}", reader.NodeType, reader.Name);
          else
             Console.WriteLine("{0} {1}", reader.NodeType, reader.Value);
        } 
     } 
     finally 
     {
        if (reader != null)
          reader.Close();
      }
  }
} // End class
#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
int main()
{
   XmlValidatingReader^ reader = nullptr;
   try
   {
      
      //Create the XML fragment to be parsed.
      String^ xmlFrag = "<book genre='novel' misc='sale-item &h; 1987'></book>";
      
      //Create the XmlParserContext.
      XmlParserContext^ context;
      String^ subset = "<!ENTITY h 'hardcover'>";
      context = gcnew XmlParserContext( nullptr,nullptr,"book",nullptr,nullptr,subset,"","",XmlSpace::None );
      
      //Create the reader and set it to not expand general entities. 
      reader = gcnew XmlValidatingReader( xmlFrag,XmlNodeType::Element,context );
      reader->ValidationType = ValidationType::None;
      reader->EntityHandling = EntityHandling::ExpandCharEntities;
      
      //Read the misc attribute. Because EntityHandling is set to
      //ExpandCharEntities, the attribute is parsed into multiple text
      //and entity reference nodes.
      reader->MoveToContent();
      reader->MoveToAttribute( "misc" );
      while ( reader->ReadAttributeValue() )
      {
         if ( reader->NodeType == XmlNodeType::EntityReference )
                  
         //To expand the entity, call ResolveEntity.
         Console::WriteLine( "{0} {1}", reader->NodeType, reader->Name );
         else
                  Console::WriteLine( "{0} {1}", reader->NodeType, reader->Value );
      }
   }
   finally
   {
      if ( reader != nullptr )
            reader->Close();
   }

}
import System.*;
import System.IO.*;
import System.Xml.*;

public class Sample
{   
    public static void main(String[] args)
    {
        XmlValidatingReader reader = null;
        try {
            //Create the XML fragment to be parsed.
            String xmlFrag =
                "<book genre='novel' misc='sale-item &h; 1987'></book>";

            //Create the XmlParserContext.
            XmlParserContext context;
            String subSet = "<!ENTITY h 'hardcover'>";
            context = new XmlParserContext(null, null, "book", null, null,
                subSet, "", "", XmlSpace.None);

            //Create the reader and set it to not expand general entities. 
            reader = new XmlValidatingReader
                (xmlFrag, XmlNodeType.Element, context);
            reader.set_ValidationType(ValidationType.None);
            reader.set_EntityHandling(EntityHandling.ExpandCharEntities);

            //Read the misc attribute. Because EntityHandling is set to
            //ExpandCharEntities, the attribute is parsed into multiple text
            //and entity reference nodes.
            reader.MoveToContent();
            reader.MoveToAttribute("misc");
            while(reader.ReadAttributeValue()) {
                if (reader.get_NodeType().Equals
                    (XmlNodeType.EntityReference)) {
                    //To expand the entity, call ResolveEntity.
                    Console.WriteLine("{0} {1}", reader.get_NodeType(),
                        reader.get_Name());
                }
                else {
                    Console.WriteLine("{0} {1}", reader.get_NodeType(), 
                        reader.get_Value());
                }
            }
        }
        finally {
            if (reader != null) {
                reader.Close();
            }
        }
    } //main
} //End class Sample

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

XmlValidatingReader-Klasse
XmlValidatingReader-Member
System.Xml-Namespace

Weitere Ressourcen

Lesen von XML mit dem "XmlReader"