XmlValidatingReader Konstruktoren
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Initialisiert eine neue Instanz der XmlValidatingReader
-Klasse.
Überlädt
XmlValidatingReader(XmlReader) |
Initialisiert eine neue Instanz der |
XmlValidatingReader(Stream, XmlNodeType, XmlParserContext) |
Initialisiert eine neue Instanz der |
XmlValidatingReader(String, XmlNodeType, XmlParserContext) |
Initialisiert eine neue Instanz der |
XmlValidatingReader(XmlReader)
- Quelle:
- XmlValidatingReader.cs
- Quelle:
- XmlValidatingReader.cs
- Quelle:
- XmlValidatingReader.cs
Initialisiert eine neue Instanz der XmlValidatingReader
-Klasse, die den vom angegebenen XmlReader zurückgegebenen Inhalt validiert.
public:
XmlValidatingReader(System::Xml::XmlReader ^ reader);
public XmlValidatingReader (System.Xml.XmlReader reader);
new System.Xml.XmlValidatingReader : System.Xml.XmlReader -> System.Xml.XmlValidatingReader
Public Sub New (reader As XmlReader)
Parameter
- reader
- XmlReader
Der XmlReader
, aus dem während der Überprüfung gelesen werden soll. Die aktuelle Implementierung unterstützt nur XmlTextReader.
Ausnahmen
Der angegebene Reader ist kein XmlTextReader
.
Beispiele
Im folgenden Beispiel werden zwei Dokumente überprüft.
#using <System.Xml.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Xml::Schema;
public ref class Sample
{
private:
static Boolean m_success = true;
public:
Sample()
{
// Validate the document using an external XSD schema. Validation should fail.
Validate( "notValidXSD.xml" );
// Validate the document using an inline XSD. Validation should succeed.
Validate( "inlineXSD.xml" );
}
private:
// Display the validation error.
void ValidationCallBack( Object^ /*sender*/, ValidationEventArgs^ args )
{
m_success = false;
Console::WriteLine( "\r\n\tValidation error: {0}", args->Message );
}
void Validate( String^ filename )
{
m_success = true;
Console::WriteLine( "\r\n******" );
Console::WriteLine( "Validating XML file {0}", filename );
XmlTextReader^ txtreader = gcnew XmlTextReader( filename );
XmlValidatingReader^ reader = gcnew XmlValidatingReader( txtreader );
// Set the validation event handler
reader->ValidationEventHandler += gcnew ValidationEventHandler( this, &Sample::ValidationCallBack );
// Read XML data
while ( reader->Read() )
{}
Console::WriteLine( "Validation finished. Validation {0}", (m_success == true ? (String^)"successful!" : "failed.") );
// Close the reader.
reader->Close();
}
};
int main()
{
Sample^ validation = gcnew Sample;
}
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
public class Sample
{
private Boolean m_success = true;
public Sample ()
{
//Validate the document using an external XSD schema. Validation should fail.
Validate("notValidXSD.xml");
//Validate the document using an inline XSD. Validation should succeed.
Validate("inlineXSD.xml");
}
public static void Main ()
{
Sample validation = new Sample();
}
private void Validate(String filename)
{
m_success = true;
Console.WriteLine("\r\n******");
Console.WriteLine("Validating XML file " + filename.ToString());
XmlTextReader txtreader = new XmlTextReader (filename);
XmlValidatingReader reader = new XmlValidatingReader (txtreader);
// Set the validation event handler
reader.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);
// Read XML data
while (reader.Read()){}
Console.WriteLine ("Validation finished. Validation {0}", (m_success==true ? "successful!" : "failed."));
//Close the reader.
reader.Close();
}
//Display the validation error.
private void ValidationCallBack (object sender, ValidationEventArgs args)
{
m_success = false;
Console.WriteLine("\r\n\tValidation error: " + args.Message );
}
}
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema
public class Sample
private m_success as Boolean = true
public sub New ()
'Validate the document using an external XSD schema. Validation should fail.
Validate("notValidXSD.xml")
'Validate the document using an inline XSD. Validation should succeed.
Validate("inlineXSD.xml")
end sub
public shared sub Main ()
Dim validation as Sample = new Sample()
end sub
private sub Validate(filename as String)
m_success = true
Console.WriteLine()
Console.WriteLine("******")
Console.WriteLine("Validating XML file " + filename.ToString())
Dim txtreader as XmlTextReader = new XmlTextReader (filename)
Dim reader as XmlValidatingReader = new XmlValidatingReader (txtreader)
' Set the validation event handler
AddHandler reader.ValidationEventHandler, AddressOf ValidationCallBack
' Read XML data
while (reader.Read())
end while
Console.WriteLine ("Validation finished. Validation {0}", IIf(m_success, "successful!", "failed."))
'Close the reader.
reader.Close()
end sub
'Display the validation error.
Private sub ValidationCallBack (sender as object, args as ValidationEventArgs)
m_success = false
Console.WriteLine()
Console.WriteLine(" Validation error: " + args.Message )
end sub
end class
Im Beispiel werden die folgenden Eingabedateien verwendet:
notValidXSD.xml
<?xml version='1.0'?>
<bookstore xmlns="urn:bookstore-schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:bookstore-schema books.xsd">
<book>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
</book>
<book genre="novel">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
</bookstore>
books.xsd
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="urn:bookstore-schema"
elementFormDefault="qualified"
targetNamespace="urn:bookstore-schema">
<xsd:element name="bookstore" type="bookstoreType"/>
<xsd:complexType name="bookstoreType">
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="book" type="bookType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="bookType">
<xsd:sequence>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="author" type="authorName"/>
<xsd:element name="price" type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="genre" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="authorName">
<xsd:sequence>
<xsd:element name="first-name" type="xsd:string"/>
<xsd:element name="last-name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
inlineXSD.xml
<store-data>
<!--Inline XSD schema-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="bookstore" type="bookstoreType"/>
<xsd:complexType name="bookstoreType">
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="book" type="bookType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="bookType">
<xsd:sequence>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="price" type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="genre" type="xsd:string"/>
</xsd:complexType>
</xsd:schema>
<!-- end of schema -->
<bookstore>
<book genre="novel">
<title>Pride And Prejudice</title>
<price>19.95</price>
</book>
</bookstore>
</store-data>
Hinweise
Hinweis
Die XmlValidatingReader -Klasse ist in .NET Framework 2.0 veraltet. Sie können eine Validierungsinstanz erstellen, XmlReader indem Sie die XmlReaderSettings -Klasse und die Create -Methode verwenden. Weitere Informationen finden Sie im Abschnitt Hinweise unter der XmlReader Referenzseite.
Alle knoten, die vom angegebenen XmlReader
zurückgegeben werden, werden auch von diesem validierenden Reader zurückgegeben, sodass es im Prozess zu keinem Informationsverlust kommt. Neue Knoten, die nicht vom zugrunde liegenden Reader zurückgegeben werden, können von diesem Reader hinzugefügt werden (z. B. Standardattribute und die untergeordneten Elemente eines Entitätsverweis). Alle eigenschaften, die für den angegebenen festgelegt sind XmlTextReader
, gelten auch für diesen überprüfenden Reader. Wenn für den angegebenen Reader beispielsweise WhitespaceHandling.None festgelegt wurde, ignoriert dieser überprüfende Reader auch Leerzeichen.
Wenn externe Dokumenttypdefinitionen (DTDs) oder Schemas für die Validierung erforderlich sind, legt die XmlResolver -Eigenschaft das Objekt fest, das XmlResolver zum Auflösen externer Ressourcen verwendet werden soll.
Weitere Informationen
Gilt für:
XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)
- Quelle:
- XmlValidatingReader.cs
- Quelle:
- XmlValidatingReader.cs
- Quelle:
- XmlValidatingReader.cs
Initialisiert eine neue Instanz der XmlValidatingReader
-Klasse mit den angegebenen Werten.
public:
XmlValidatingReader(System::IO::Stream ^ xmlFragment, System::Xml::XmlNodeType fragType, System::Xml::XmlParserContext ^ context);
public XmlValidatingReader (System.IO.Stream xmlFragment, System.Xml.XmlNodeType fragType, System.Xml.XmlParserContext context);
new System.Xml.XmlValidatingReader : System.IO.Stream * System.Xml.XmlNodeType * System.Xml.XmlParserContext -> System.Xml.XmlValidatingReader
Public Sub New (xmlFragment As Stream, fragType As XmlNodeType, context As XmlParserContext)
Parameter
- xmlFragment
- Stream
Der Stream, der das zu analysierende XML-Fragment enthält.
- fragType
- XmlNodeType
Der XmlNodeType des XML-Fragments. Damit wird der mögliche Inhalt des Fragments bestimmt (siehe Tabelle unten).
- context
- XmlParserContext
Der XmlParserContext, in dem das XML-Fragment analysiert werden soll. Dazu gehören die zu verwendende XmlNameTable, die Codierung, der Namespacebereich, der aktuelle xml:lang
-Bereich und der aktuelle xml:space
-Bereich.
Ausnahmen
fragType
ist keiner der in der folgenden Tabelle aufgeführten Knotentypen.
Hinweise
Hinweis
Die XmlValidatingReader -Klasse ist in .NET Framework 2.0 veraltet. Sie können eine Validierungsinstanz erstellen, XmlReader indem Sie die XmlReaderSettings -Klasse und die Create -Methode verwenden. Weitere Informationen finden Sie im Abschnitt Hinweise unter der XmlReader Referenzseite.
Dieser Konstruktor analysiert die angegebene Zeichenfolge als XML-Fragment. Wenn das XML-Fragment ein Element oder Attribut ist, können Sie die Regeln auf Stammebene für wohlgeformte XML-Dokumente umgehen.
In der folgenden Tabelle sind gültige Werte für fragType
und wie der Leser jeden der verschiedenen Knotentypen analysiert.
XmlNodeType | Fragment kann enthalten |
---|---|
Element | Alle gültigen Elementinhalte (z. B. eine beliebige Kombination aus Elementen, Kommentaren, Verarbeitungsanweisungen, cdata, Text und Entitätsverweisen). |
attribute | Der Wert eines Attributs (der Teil innerhalb der Anführungszeichen). |
Dokument | Der Inhalt eines gesamten XML-Dokuments; Dadurch werden Regeln auf Dokumentebene erzwungen. |
Der Reader verwendet die folgenden Schritte, um die Codierung des Datenstroms zu bestimmen:
Überprüft die XmlParserContext.Encoding -Eigenschaft, um die Codierung zu bestimmen.
Wenn die
Encoding
-Eigenschaft istnull
, sucht der Leser am Anfang des Datenstroms nach einer Bytereihenfolgemarke.Wenn die
Encoding
-Eigenschaft istnull
und keine Bytereihenfolgenmarkierung gefunden wird, geht der Reader davon aus, dass der Stream in UTF-8 codiert ist.
Wenn dieser Reader mithilfe der Dokumenttypdefinition (Document Type Definition, ValidationType DTD) überprüft (d. h. auf ValidationType.DTD oder ValidationType.Auto festgelegt ist), muss der XmlParserContext
im Konstruktor angegebene alle erforderlichen DocumentType-Informationen bereitstellen.
Hinweis
Es ist nicht möglich, ein Fragment mithilfe einer DTD zu überprüfen. Per Definition erfordert eine DTD, dass ein gesamtes Dokument zur Überprüfung geladen wird.
Wenn dieser Reader mithilfe von XDR-Schemas (XML-Data Reduced) oder XSD-Schemas (XML Schema Definition Language) überprüft, verwenden Sie die Schemas -Eigenschaft, um das anzugeben, XmlParserContext
das XmlSchemaCollection die Schemas enthält (d. a. die DocumentType-Informationen müssen nicht angegeben werden).
Weitere Informationen
Gilt für:
XmlValidatingReader(String, XmlNodeType, XmlParserContext)
- Quelle:
- XmlValidatingReader.cs
- Quelle:
- XmlValidatingReader.cs
- Quelle:
- XmlValidatingReader.cs
Initialisiert eine neue Instanz der XmlValidatingReader
-Klasse mit den angegebenen Werten.
public:
XmlValidatingReader(System::String ^ xmlFragment, System::Xml::XmlNodeType fragType, System::Xml::XmlParserContext ^ context);
public XmlValidatingReader (string xmlFragment, System.Xml.XmlNodeType fragType, System.Xml.XmlParserContext context);
new System.Xml.XmlValidatingReader : string * System.Xml.XmlNodeType * System.Xml.XmlParserContext -> System.Xml.XmlValidatingReader
Public Sub New (xmlFragment As String, fragType As XmlNodeType, context As XmlParserContext)
Parameter
- xmlFragment
- String
Die Zeichenfolge, die das zu analysierende XML-Fragment enthält.
- fragType
- XmlNodeType
Der XmlNodeType des XML-Fragments. Damit wird auch der mögliche Inhalt der Fragmentzeichenfolge bestimmt (siehe Tabelle unten).
- context
- XmlParserContext
Der XmlParserContext, in dem das XML-Fragment analysiert werden soll. Dazu gehören die zu verwendende NameTable, die Codierung, der Namespacebereich, der aktuelle xml:lang-Bereich und der aktuelle xml:space-Bereich.
Ausnahmen
fragType
ist keiner der in der folgenden Tabelle aufgeführten Knotentypen.
Beispiele
Im folgenden Beispiel wird ein XML-Fragment gelesen. Es verwendet ein XmlParserContext
und dessen XmlNamespaceManager , um den Namespaceabgleich zu verarbeiten.
using System;
using System.IO;
using System.Xml;
public class Sample
{
public static void Main()
{
XmlTextReader reader = null;
try
{
//Create the XML fragment to be parsed.
string xmlFrag = "<book> " +
"<title>Pride And Prejudice</title>" +
"<bk:genre>novel</bk:genre>" +
"</book>";
//Create the XmlNamespaceManager that is used to
//look up namespace information.
NameTable nt = new NameTable();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
nsmgr.AddNamespace("bk", "urn:sample");
//Create the XmlParserContext.
XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);
//Implement the reader.
reader = new XmlTextReader(xmlFrag, XmlNodeType.Element, context);
//Parse the XML fragment. If they exist, display the
//prefix and namespace URI of each element.
while (reader.Read())
{
if (reader.IsStartElement())
{
if (string.IsNullOrEmpty(reader.Prefix))
{
Console.WriteLine("<{0}>", reader.LocalName);
}
else
{
Console.Write("<{0}:{1}>", reader.Prefix, reader.LocalName);
Console.WriteLine(" The namespace URI is " + reader.NamespaceURI);
}
}
}
}
finally
{
if (reader != null)
reader.Close();
}
}
} // End class
Imports System.IO
Imports System.Xml
Public Class Sample
Public Shared Sub Main()
Dim reader As XmlTextReader = Nothing
Try
'Create the XML fragment to be parsed.
Dim xmlFrag As String = "<book> " & _
"<title>Pride And Prejudice</title>" & _
"<bk:genre>novel</bk:genre>" & _
"</book>"
'Create the XmlNamespaceManager that is used to
'look up namespace information.
Dim nt As New NameTable()
Dim nsmgr As New XmlNamespaceManager(nt)
nsmgr.AddNamespace("bk", "urn:sample")
'Create the XmlParserContext.
Dim context As New XmlParserContext(Nothing, nsmgr, Nothing, XmlSpace.None)
'Implement the reader.
reader = New XmlTextReader(xmlFrag, XmlNodeType.Element, context)
'Parse the XML fragment. If they exist, display the
'prefix and namespace URI of each element.
While reader.Read()
If reader.IsStartElement() Then
If reader.Prefix = String.Empty Then
Console.WriteLine("<{0}>", reader.LocalName)
Else
Console.Write("<{0}:{1}>", reader.Prefix, reader.LocalName)
Console.WriteLine(" The namespace URI is " & reader.NamespaceURI)
End If
End If
End While
Finally
If Not (reader Is Nothing) Then
reader.Close()
End If
End Try
End Sub
End Class
Hinweise
Hinweis
Die XmlValidatingReader -Klasse ist in .NET Framework 2.0 veraltet. Sie können eine Validierungsinstanz erstellen, XmlReader indem Sie die XmlReaderSettings -Klasse und die Create -Methode verwenden. Weitere Informationen finden Sie im Abschnitt Hinweise unter der XmlReader Referenzseite.
Dieser Konstruktor analysiert die angegebene Zeichenfolge als XML-Fragment. Wenn das XML-Fragment ein Element oder Attribut ist, können Sie die Regeln auf Stammebene für wohlgeformte XML-Dokumente umgehen. Dieser Konstruktor kann von zurückgegebene ReadInnerXmlZeichenfolgen verarbeiten.
In der folgenden Tabelle sind gültige Werte für fragType
und wie der Leser jeden der verschiedenen Knotentypen analysiert.
XmlNodeType | Fragment kann enthalten |
---|---|
Element | Alle gültigen Elementinhalte (z. B. eine beliebige Kombination aus Elementen, Kommentaren, Verarbeitungsanweisungen, cdata, Text und Entitätsverweisen). |
attribute | Der Wert eines Attributs (der Teil innerhalb der Anführungszeichen). |
Dokument | Der Inhalt eines gesamten XML-Dokuments; Dadurch werden Regeln auf Dokumentebene erzwungen. |
Wenn dieser Reader mithilfe der Dokumenttypdefinition (Document Type Definition, ValidationType DTD) überprüft (d. h. auf ValidationType.DTD oder ValidationType.Auto festgelegt ist), muss der XmlParserContext
im Konstruktor angegebene alle erforderlichen DocumentType-Informationen bereitstellen.
Hinweis
Es ist nicht möglich, ein Fragment mithilfe von DTD zu überprüfen. Die DTD erfordert per Definition, dass ein gesamtes Dokument zur Überprüfung geladen wird.
Wenn dieser Reader mithilfe von XDR-Schemas (XML-Data Reduced) oder XSD-Schemas (XML Schema Definition Language) überprüft, verwenden Sie die Schemas -Eigenschaft, um das anzugeben, das XmlSchemaCollection die Schemas enthält (die XmlParserContext
DocumentType-Informationen müssen nicht angegeben werden).