XmlValidatingReader.EntityHandling Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá nebo nastaví hodnotu, která určuje, jak čtenář zpracovává entity.
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
Hodnota vlastnosti
Jedna z EntityHandling hodnot. Pokud je zadána hodnota ne EntityHandling
, použije se výchozí hodnota EntityHandling.ExpandEntities.
Výjimky
Byla zadána neplatná hodnota.
Příklady
Následující příklad používá metodu ResolveEntity
k rozbalení obecné 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
V příkladu se jako vstup používá soubor book1.xml
, .
<?xml version='1.0' ?>
<!DOCTYPE book [<!ENTITY h 'hardcover'>]>
<book>
<title>Pride And Prejudice</title>
<misc>&h;</misc>
</book>
Poznámky
Poznámka
Třída XmlValidatingReader je zastaralá v rozhraní .NET Framework 2.0. Ověřovací instanci můžete vytvořit XmlReader pomocí XmlReaderSettings třídy a Create metody . Další informace najdete v části Poznámky na XmlReader referenční stránce.
Tuto vlastnost lze změnit a projeví se po dalším Read volání.
Pokud EntityHandling
je hodnota nastavená na ExpandCharEntities
, hodnoty atributů se normalizují jenom částečně. Čtenář normalizuje každý jednotlivý textový uzel nezávisle na obsahu sousedních referenčních uzlů entit.
Pro ilustraci rozdílu mezi režimy zpracování entit zvažte následující kód XML:
<!DOCTYPE doc [<!ENTITY num "123">]>
<doc> A # </doc>
Pokud EntityHandling
je nastavená na ExpandEntities
uzel elementu "doc", obsahuje jeden textový uzel s rozbaleným textem entity:
Hloubka | Nodetype | Name | Hodnota |
---|---|---|---|
1 | Text | A 123 |
Pokud EntityHandling
je nastavená hodnota ExpandCharEntities
a WhitespaceHandling je nastavená na hodnotu Významné nebo Vše, element "doc" rozbalí entitu znaků a vrátí obecnou entitu jako uzel:
Hloubka | Nodetype | Name | Hodnota |
---|---|---|---|
1 | Text | A | |
1 | EntityReference | num | |
1 | Významnýwhitespace |