Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die EntityHandling-Eigenschaft definiert, wie Entitäten durch XmlValidatingReader behandelt werden sollen.
ExpandEntities
Wenn die EntityHandling-Eigenschaft auf ExpandEntities gesetzt ist, erweitert XmlValidatingReader alle Entitäten im XML-Dokument. Da der Entitätstext erweitert ist, wird XmlNodeType von EntityReference nicht angezeigt. Dies ist die Standardeinstellung.
ExpandCharEntities
Wenn die EntityHandling-Eigenschaft auf ExpandCharEntities gesetzt ist, erweitert XmlValidatingReader die Zeichenentitäten und gibt die allgemeinen Entitäten als EntityReference-Knotentypen zurück (NodeType = XmlNodeType.EntityReference, Name = name of the entity, HasValue = false).
ResolveEntity
Durch die ResolveEntity-Methode kann die allgemeine Entität für EntityReference-Knoten erweitert werden. Dadurch wird die Behandlung der Entitäten optimiert, da diese nur bei Bedarf erweitert werden. Bei Aufruf der GetAttribute-Methode werden die allgemeinen Entitäten erweitert.
Die Behandlung von Entitäten kann während des Leseprozesses jederzeit geändert werden. Die Änderungen der Einstellung von EntityHandling werden beim nächsten Aufruf der Read-Methode wirksam.
Im folgenden Codebeispiel wird ein XmlValidatingReader mit der XML-Eingabe von book1.xml erstellt.
Imports System
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 the title start tag.
reader.Skip()
' Skip the title element.
' Read the miscellaneous 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 (txtreader Is Nothing) Then
txtreader.Close()
End If
If Not (reader Is Nothing) Then
reader.Close()
End If
End Try
End Sub
' Main
End Class
' Sample
[C#]
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 the title start tag.
reader.Skip();
// Skip the title element.
// Read the miscellaneous 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 (txtreader != null)
txtreader.Close();
if (reader != null)
reader.Close();
}
}
}
Im folgenden Beispiel wird der Inhalt der zu überprüfenden Eingabedatei book1.xml dargestellt.
<?xml version='1.0' ?>
<!DOCTYPE book [<!ENTITY h 'hardcover'>]>
<book>
<title>Pride And Prejudice</title>
<misc>&h;</misc>
</book>
Siehe auch
Gültigkeitsprüfung von XML mit Schemas | XmlValidatingReader.ReadTypedValue-Methode