Comparteix a través de


XmlValidatingReader.EntityHandling Propiedad

Definición

Obtiene o establece un valor que especifica cómo controla el lector las entidades.

public:
 property System::Xml::EntityHandling EntityHandling { System::Xml::EntityHandling get(); void set(System::Xml::EntityHandling value); };
public System.Xml.EntityHandling EntityHandling { get; set; }
member this.EntityHandling : System.Xml.EntityHandling with get, set
Public Property EntityHandling As EntityHandling

Valor de propiedad

Uno de los valores de EntityHandling. Si no se especifica ningún valor EntityHandling, se usa el valor predeterminado EntityHandling.ExpandEntities.

Excepciones

Se ha especificado un valor no válido.

Ejemplos

En el ejemplo siguiente se usa el ResolveEntity método para expandir una entidad general.

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
int main()
{
   XmlValidatingReader^ reader = nullptr;
   XmlTextReader^ txtreader = nullptr;
   try
   {
      
      //Create and load the XmlTextReader with the XML file. 
      txtreader = gcnew XmlTextReader( "book1.xml" );
      txtreader->WhitespaceHandling = WhitespaceHandling::None;
      
      //Create the XmlValidatingReader over the XmlTextReader.
      //Set the reader to not expand general entities.
      reader = gcnew XmlValidatingReader( txtreader );
      reader->ValidationType = ValidationType::None;
      reader->EntityHandling = EntityHandling::ExpandCharEntities;
      reader->MoveToContent(); //Move to the root element.
      reader->Read(); //Move to title start tag.
      reader->Skip(); //Skip the title element.
      
      //Read the misc start tag.  The reader is now positioned on
      //the entity reference node.
      reader->ReadStartElement();
      
      //Because EntityHandling is set to ExpandCharEntities, you must call 
      //ResolveEntity to expand the entity.  The entity replacement text is 
      //then parsed and returned as a child node.         
      Console::WriteLine( "Expand the entity..." );
      reader->ResolveEntity();
      Console::WriteLine( "The entity replacement text is returned as a text node." );
      reader->Read();
      Console::WriteLine( "NodeType: {0} Value: {1}", reader->NodeType, reader->Value );
      Console::WriteLine( "An EndEntity node closes the entity reference scope." );
      reader->Read();
      Console::WriteLine( "NodeType: {0} Name: {1}", reader->NodeType, reader->Name );
   }
   finally
   {
      if ( reader != nullptr )
            reader->Close();
   }

}

using System;
using System.IO;
using System.Xml;

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

     try
     {
       //Create and load the XmlTextReader with the XML file.
       txtreader = new XmlTextReader("book1.xml");
       txtreader.WhitespaceHandling = WhitespaceHandling.None;

       //Create the XmlValidatingReader over the XmlTextReader.
       //Set the reader to not expand general entities.
       reader = new XmlValidatingReader(txtreader);
       reader.ValidationType = ValidationType.None;
       reader.EntityHandling = EntityHandling.ExpandCharEntities;

       reader.MoveToContent();  //Move to the root element.
       reader.Read();  //Move to title start tag.
       reader.Skip();  //Skip the title element.

       //Read the misc start tag.  The reader is now positioned on
       //the entity reference node.
       reader.ReadStartElement();

       //Because EntityHandling is set to ExpandCharEntities, you must call
       //ResolveEntity to expand the entity.  The entity replacement text is
       //then parsed and returned as a child node.
       Console.WriteLine("Expand the entity...");
       reader.ResolveEntity();

       Console.WriteLine("The entity replacement text is returned as a text node.");
       reader.Read();
       Console.WriteLine("NodeType: {0} Value: {1}", reader.NodeType ,reader.Value);

       Console.WriteLine("An EndEntity node closes the entity reference scope.");
       reader.Read();
       Console.WriteLine("NodeType: {0} Name: {1}", reader.NodeType,reader.Name);
    }
    finally
    {
       if (reader != null)
         reader.Close();
    }
  }
}
Option Strict
Option Explicit

Imports System.IO
Imports System.Xml

Public Class Sample
   
   Public Shared Sub Main()
      Dim reader As XmlValidatingReader = Nothing
      Dim txtreader As XmlTextReader = Nothing
      
      Try
         'Create and load the XmlTextReader with the XML file. 
         txtreader = New XmlTextReader("book1.xml")
         txtreader.WhitespaceHandling = WhitespaceHandling.None
         
         'Create the XmlValidatingReader over the XmlTextReader.
         'Set the reader to not expand general entities.
         reader = New XmlValidatingReader(txtreader)
         reader.ValidationType = ValidationType.None
         reader.EntityHandling = EntityHandling.ExpandCharEntities
         
         reader.MoveToContent() 'Move to the root element.
         reader.Read() 'Move to title start tag.
         reader.Skip() 'Skip the title element.
         'Read the misc start tag.  The reader is now positioned on
         'the entity reference node.
         reader.ReadStartElement()
         
         'Because EntityHandling is set to ExpandCharEntities, you must call 
         'ResolveEntity to expand the entity.  The entity replacement text is 
         'then parsed and returned as a child node.  
         Console.WriteLine("Expand the entity...")
         reader.ResolveEntity()
         
         Console.WriteLine("The entity replacement text is returned as a text node.")
         reader.Read()
         Console.WriteLine("NodeType: {0} Value: {1}", reader.NodeType, reader.Value)
         
         Console.WriteLine("An EndEntity node closes the entity reference scope.")
         reader.Read()
         Console.WriteLine("NodeType: {0} Name: {1}", reader.NodeType, reader.Name)
      
      Finally
         If Not (reader Is Nothing) Then
            reader.Close()
         End If
      End Try
   End Sub
End Class

En el ejemplo se usa el archivo , book1.xmlcomo entrada.


<?xml version='1.0' ?>
<!DOCTYPE book [<!ENTITY h 'hardcover'>]>
<book>
  <title>Pride And Prejudice</title>
  <misc>&h;</misc>
</book>

Comentarios

Nota:

La XmlValidatingReader clase está obsoleta en .NET Framework 2.0. Puede crear una instancia de XmlReader validación mediante la XmlReaderSettings clase y el Create método . Para obtener más información, vea la sección Comentarios de la página de referencia de XmlReader.

Esta propiedad se puede cambiar y surte efecto después de la siguiente Read llamada.

Cuando EntityHandling se establece ExpandCharEntitiesen , los valores de atributo solo se normalizan parcialmente. El lector normaliza cada nodo de texto individual independientemente del contenido de los nodos de referencia de entidad adyacentes.

Para ilustrar la diferencia entre los modos de control de entidades, tenga en cuenta el siguiente XML:

<!DOCTYPE doc [<!ENTITY num "123">]>  
 <doc> &#65; &num; </doc>  

Cuando EntityHandling se establece ExpandEntities en el nodo de elemento "doc" contiene un nodo de texto con el texto de entidad expandido:

Profundidad NodeType Nombre Value
1 Text A 123

Cuando EntityHandling se establece ExpandCharEntitiesen y WhitespaceHandling se establece en Significant o All, el elemento "doc" expande la entidad de caracteres y devuelve la entidad general como nodo:

Profundidad NodeType Nombre Value
1 Text A
1 EntityReference num
1 SignificantWhitespace

Se aplica a

Consulte también