XmlValidatingReader.EntityHandling Właściwość

Definicja

Pobiera lub ustawia wartość określającą sposób, w jaki czytnik obsługuje jednostki.Gets or sets a value that specifies how the reader handles entities.

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

Wartość właściwości

EntityHandling

Jedna z wartości EntityHandling.One of the EntityHandling values. Jeśli żaden EntityHandling nie jest określony, domyślnie jest to EntityHandling. ExpandEntities.If no EntityHandling is specified, it defaults to EntityHandling.ExpandEntities.

Wyjątki

Określono nieprawidłową wartość.Invalid value was specified.

Przykłady

W poniższym przykładzie zastosowano metodę ResolveEntity, aby rozwinąć jednostkę ogólną.The following example uses the ResolveEntity method to expand a general entity.

#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

W przykładzie jest użyty plik book1.xmljako dane wejściowe.The example uses the file, book1.xml, as input.


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

Uwagi

Uwaga

Klasa XmlValidatingReader jest przestarzała w .NET Framework 2.0.NET Framework 2.0.The XmlValidatingReader class is obsolete in .NET Framework 2.0.NET Framework 2.0. Można utworzyć sprawdzanie poprawności wystąpienia XmlReader przy użyciu klasy XmlReaderSettings i metody Create.You can create a validating XmlReader instance by using the XmlReaderSettings class and the Create method. Aby uzyskać więcej informacji, zobacz sekcję uwagi na stronie odniesienia XmlReader.For more information, see the Remarks section of the XmlReader reference page.

Tę właściwość można zmienić i zacznie obowiązywać po następnym wywołaniu Read.This property can be changed and takes effect after the next Read call.

Gdy EntityHandling jest ustawiona na ExpandCharEntities, wartości atrybutów są tylko częściowo znormalizowane.When EntityHandling is set to ExpandCharEntities, attribute values are only partially normalized. Czytnik normalizuje każdy pojedynczy węzeł tekstowy niezależnie od zawartości sąsiadujących węzłów odwołania.The reader normalizes each individual text node independently from the content of adjacent entity reference nodes.

Aby zilustrować różnicę między trybami obsługi jednostek, należy wziąć pod uwagę następujące XML:To illustrate the difference between the entity handling modes consider the following XML:

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

Gdy EntityHandling jest ustawiona na ExpandEntities węzeł elementu "doc" zawiera jeden węzeł tekstowy z rozwiniętym tekstem jednostki:When EntityHandling is set to ExpandEntities the "doc" element node contains one text node with the expanded entity text:

ŚcisłDepth NodeTypeNodeType Name (Nazwa)Name WartośćValue
11 TekstText A 123A 123

Gdy EntityHandling jest ustawiona na ExpandCharEntities, a WhitespaceHandling jest ustawiona na wartość znaczący lub wszystkie, element "doc" rozszerza jednostkę znaku i zwraca jednostkę ogólną jako węzeł:When EntityHandling is set to ExpandCharEntities, and WhitespaceHandling is set to Significant or All, the "doc" element expands the character entity and returns the general entity as a node:

ŚcisłDepth NodeTypeNodeType Name (Nazwa)Name WartośćValue
11 TekstText AA
11 OczekiwaEntityReference numerowannum
11 SignificantWhitespaceSignificantWhitespace

Dotyczy

Zobacz też