XmlValidatingReader.EntityHandling Proprietà

Definizione

Ottiene o imposta un valore che specifica il modo in cui il lettore gestisce le entità.

public System.Xml.EntityHandling EntityHandling { get; set; }

Valore della proprietà

Uno dei valori di EntityHandling. Se non è specificato un oggetto EntityHandling, per impostazione predefinita viene usato EntityHandling.ExpandEntities.

Eccezioni

È stato specificato un valore non valido.

Esempio

Nell'esempio seguente viene usato il ResolveEntity metodo per espandere un'entità generale.

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();
    }
  }
}

Nell'esempio viene usato il file , book1.xml, come input.


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

Commenti

Nota

La XmlValidatingReader classe è obsoleta in .NET Framework 2.0. È possibile creare un'istanza di XmlReader convalida usando la XmlReaderSettings classe e il Create metodo . Per altre informazioni, vedere la sezione Note della pagina di riferimento XmlReader.

Questa proprietà può essere modificata e diventa effettiva dopo la chiamata successiva Read .

Quando EntityHandling è impostato su ExpandCharEntities, i valori degli attributi vengono normalizzati solo parzialmente. Il lettore normalizza ogni singolo nodo di testo indipendentemente dal contenuto dei nodi di riferimento di entità adiacenti.

Per illustrare la differenza tra le modalità di gestione delle entità, considerare il codice XML seguente:

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

Quando EntityHandling è impostato ExpandEntities sul nodo dell'elemento "doc" contiene un nodo di testo con il testo dell'entità espansa:

Profondità Tipo di nodo Nome Valore
1 Testo A 123

Quando EntityHandling è impostato su e WhitespaceHandling è impostato ExpandCharEntitiessu Significativo o All, l'elemento "doc" espande l'entità carattere e restituisce l'entità generale come nodo:

Profondità Tipo di nodo Nome Valore
1 Testo A
1 EntityReference num
1 SignificantWhitespace

Si applica a

Prodotto Versioni
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Vedi anche