XmlValidatingReader Konstruktory
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Inicjuje nowe wystąpienie klasy XmlValidatingReader
.
Przeciążenia
XmlValidatingReader(XmlReader) |
Inicjuje |
XmlValidatingReader(Stream, XmlNodeType, XmlParserContext) |
Inicjuje |
XmlValidatingReader(String, XmlNodeType, XmlParserContext) |
Inicjuje |
XmlValidatingReader(XmlReader)
Inicjuje XmlValidatingReader
nowe wystąpienie klasy, które weryfikuje zawartość zwróconą z danego XmlReaderelementu .
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)
Parametry
- reader
- XmlReader
Element XmlReader
do odczytu podczas walidacji. Bieżąca implementacja obsługuje tylko XmlTextReader.
Wyjątki
Określony czytnik nie jest elementem XmlTextReader
.
Przykłady
Poniższy przykład weryfikuje dwa dokumenty.
#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
W przykładzie użyto następujących plików wejściowych:
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>
Uwagi
Uwaga
Klasa XmlValidatingReader jest przestarzała w .NET Framework 2.0. Wystąpienie weryfikacji XmlReader można utworzyć przy użyciu XmlReaderSettings klasy i Create metody . Aby uzyskać więcej informacji, zobacz sekcję Uwagi na stronie referencyjnej XmlReader .
Wszystkie węzły zwrócone z danego XmlReader
elementu są również zwracane z tego czytnika sprawdzania poprawności, więc nie ma utraty informacji w procesie. Nowe węzły, które nie są zwracane z czytnika bazowego, mogą zostać dodane przez tego czytelnika (na przykład atrybuty domyślne i elementy podrzędne odwołania do jednostki). Wszystkie właściwości ustawione w danym XmlTextReader
elemecie mają również zastosowanie do tego sprawdzania poprawności czytnika. Jeśli na przykład podany czytnik miał ustawioną wartość WhitespaceHandling.None, ta walidacja czytnika również ignoruje białe znaki.
Gdy do weryfikacji są wymagane definicje typów dokumentów zewnętrznych (DTD) lub schematy, XmlResolver właściwość ustawia XmlResolver obiekt do użycia do rozpoznawania zasobów zewnętrznych.
Zobacz też
Dotyczy
XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)
Inicjuje XmlValidatingReader
nowe wystąpienie klasy z określonymi wartościami.
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)
Parametry
- xmlFragment
- Stream
Strumień zawierający fragment XML do przeanalizowana.
- fragType
- XmlNodeType
Fragment XmlNodeType XML. Określa to, co może zawierać fragment (patrz poniższa tabela).
- context
- XmlParserContext
Element XmlParserContext , w którym fragment XML ma być analizowany. Obejmuje XmlNameTable to użycie, kodowanie, zakres przestrzeni nazw, bieżący xml:lang
zakres i xml:space
zakres.
Wyjątki
fragType
nie jest jednym z typów węzłów wymienionych w poniższej tabeli.
Uwagi
Uwaga
Klasa XmlValidatingReader jest przestarzała w .NET Framework 2.0. Wystąpienie weryfikacji XmlReader można utworzyć przy użyciu XmlReaderSettings klasy i Create metody . Aby uzyskać więcej informacji, zobacz sekcję Uwagi na stronie referencyjnej XmlReader .
Ten konstruktor analizuje dany ciąg jako fragment kodu XML. Jeśli fragment XML jest elementem lub atrybutem, możesz pominąć reguły poziomu głównego dla dobrze sformułowanych dokumentów XML.
W poniższej tabeli wymieniono prawidłowe wartości i fragType
sposób analizowania poszczególnych typów węzłów przez czytelnika.
XmlNodeType | Fragment może zawierać |
---|---|
Element | Dowolna prawidłowa zawartość elementu (na przykład dowolna kombinacja elementów, komentarzy, instrukcji przetwarzania, cdata, tekst i odwołania do jednostki). |
Atrybut | Wartość atrybutu (część wewnątrz cudzysłowów). |
Dokument | Zawartość całego dokumentu XML; Wymusza to reguły na poziomie dokumentu. |
Czytelnik używa następujących kroków, aby określić kodowanie strumienia:
Sprawdza właściwość w XmlParserContext.Encoding celu określenia kodowania.
Encoding
Jeśli właściwość tonull
, czytnik sprawdza znacznik kolejności bajtów na początku strumienia.Encoding
Jeśli właściwość manull
wartość , a nie znaleziono znacznika kolejności bajtów, czytnik zakłada, że strumień jest zakodowany w formacie UTF-8.
Jeśli ten czytelnik będzie weryfikował przy użyciu definicji typu dokumentu (DTD) (czyli ValidationType jest ustawiony na ValidationType.DTD lub ValidationType.Auto), XmlParserContext
określony w konstruktorze musi podać wszystkie niezbędne informacje DocumentType.
Uwaga
Nie można zweryfikować fragmentu przy użyciu dtD. Zgodnie z definicją dtD wymaga załadowania całego dokumentu do weryfikacji.
Jeśli ten czytelnik będzie weryfikowany przy użyciu schematów XML-Data Zredukowane (XDR) lub XML Schema Definition Language (XSD), użyj Schemas właściwości , aby określić XmlSchemaCollection , który zawiera schematy (czyli XmlParserContext
nie musi podawać informacji DocumentType).
Zobacz też
Dotyczy
XmlValidatingReader(String, XmlNodeType, XmlParserContext)
Inicjuje XmlValidatingReader
nowe wystąpienie klasy z określonymi wartościami.
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)
Parametry
- xmlFragment
- String
Ciąg zawierający fragment XML do przeanalizowana.
- fragType
- XmlNodeType
Fragment XmlNodeType XML. Określa to również, co może zawierać ciąg fragmentu (zobacz tabelę poniżej).
- context
- XmlParserContext
Element XmlParserContext , w którym fragment XML ma być analizowany. Obejmuje NameTable to użycie, kodowanie, zakres przestrzeni nazw, bieżący zakres xml:lang i zakres xml:space.
Wyjątki
fragType
nie jest jednym z typów węzłów wymienionych w poniższej tabeli.
Przykłady
Poniższy przykład odczytuje fragment XML. Używa elementu XmlParserContext
i do XmlNamespaceManager obsługi dopasowywania przestrzeni nazw.
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
Uwagi
Uwaga
Klasa XmlValidatingReader jest przestarzała w .NET Framework 2.0. Wystąpienie weryfikacji XmlReader można utworzyć przy użyciu XmlReaderSettings klasy i Create metody . Aby uzyskać więcej informacji, zobacz sekcję Uwagi na stronie referencyjnej XmlReader .
Ten konstruktor analizuje dany ciąg jako fragment kodu XML. Jeśli fragment XML jest elementem lub atrybutem, możesz pominąć reguły poziomu głównego dla dobrze sformułowanych dokumentów XML. Ten konstruktor może obsługiwać ciągi zwracane z ReadInnerXmlelementu .
W poniższej tabeli wymieniono prawidłowe wartości i fragType
sposób analizowania poszczególnych typów węzłów przez czytelnika.
XmlNodeType | Fragment może zawierać |
---|---|
Element | Dowolna prawidłowa zawartość elementu (na przykład dowolna kombinacja elementów, komentarzy, instrukcji przetwarzania, cdata, tekst i odwołania do jednostki). |
Atrybut | Wartość atrybutu (część wewnątrz cudzysłowów). |
Dokument | Zawartość całego dokumentu XML; Wymusza to reguły na poziomie dokumentu. |
Jeśli ten czytelnik będzie weryfikowany przy użyciu definicji typu dokumentu (DTD) (czyli ValidationType jest ustawiony na ValidationType.DTD lub ValidationType.Auto), XmlParserContext
określony w konstruktorze musi podać wszystkie niezbędne informacje DocumentType.
Uwaga
Nie można zweryfikować fragmentu przy użyciu dtD. Zgodnie z definicją DTD wymaga załadowania całego dokumentu do weryfikacji.
Jeśli ten czytelnik będzie weryfikowany przy użyciu schematów XML-Data Zredukowane (XDR) lub XML Schema Definition Language (XSD), użyj Schemas właściwości , aby określić XmlSchemaCollection , który zawiera schematy (nie XmlParserContext
musi podawać informacji DocumentType).