XmlValidatingReader Конструкторы
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Инициализирует новый экземпляр класса XmlValidatingReader
.
Перегрузки
XmlValidatingReader(XmlReader) |
Инициализирует новый экземпляр класса |
XmlValidatingReader(Stream, XmlNodeType, XmlParserContext) |
Инициализирует новый экземпляр класса |
XmlValidatingReader(String, XmlNodeType, XmlParserContext) |
Инициализирует новый экземпляр класса |
XmlValidatingReader(XmlReader)
Инициализирует новый экземпляр класса XmlValidatingReader
, который служит для проверки содержимого, возвращаемого заданным XmlReader.
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)
Параметры
- reader
- XmlReader
XmlReader
, из которого при проверке данных выполняется чтение. Текущая реализация поддерживает только XmlTextReader.
Исключения
Указанное средство чтения не является XmlTextReader
.
Примеры
В следующем примере проверяется два документа.
#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
В примере используются следующие входные файлы:
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>
Комментарии
Примечание
Класс XmlValidatingReader устарел в платформа .NET Framework 2.0. Проверяющий XmlReader экземпляр можно создать с помощью XmlReaderSettings класса и Create метода. Дополнительные сведения см. в подразделе "Примечания" на справочной странице XmlReader.
Все узлы, возвращенные из данного объекта XmlReader
, также возвращаются из этого проверяющего средства чтения, поэтому в процессе нет потери информации. Новые узлы, которые не возвращаются из базового средства чтения, могут быть добавлены этим средством чтения (например, атрибуты по умолчанию и дочерние элементы ссылки на сущность). Все свойства, заданные в заданном объекте XmlTextReader
, также применяются к этому проверяющее средство чтения. Например, если предоставленное средство чтения имеет набор WhitespaceHandling.None, это проверяющее средство чтения также игнорирует пробелы.
Если для проверки требуются определения типов внешних документов (DTD) или схемы, XmlResolver свойство задает XmlResolver объект для разрешения внешних ресурсов.
См. также раздел
Применяется к
XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)
Инициализирует новый экземпляр класса XmlValidatingReader
с использованием указанных значений.
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)
Параметры
- xmlFragment
- Stream
Поток, содержащий анализируемый фрагмент XML.
- fragType
- XmlNodeType
Тип XmlNodeType фрагмента XML. Определяет содержимое фрагмента (см. таблицу ниже).
- context
- XmlParserContext
XmlParserContext, в котором анализируется фрагмент XML. Это включает в себя используемый класс XmlNameTable, кодировку, область пространства имен, текущий xml:lang
и область xml:space
.
Исключения
fragType
не относится к одному из разрешенных типов узлов, перечисленных в таблице ниже.
Комментарии
Примечание
Класс XmlValidatingReader устарел в платформа .NET Framework 2.0. Проверяющий XmlReader экземпляр можно создать с помощью XmlReaderSettings класса и Create метода. Дополнительные сведения см. в подразделе "Примечания" на справочной странице XmlReader.
Этот конструктор анализирует заданную строку как фрагмент XML. Если фрагмент XML является элементом или атрибутом, можно обойти правила корневого уровня для хорошо сформированных XML-документов.
В следующей таблице перечислены допустимые значения и fragType
способы синтаксического анализа каждого из разных типов узлов.
Тип узла XML | Фрагмент может содержать |
---|---|
Элемент | Любое допустимое содержимое элемента (например, любое сочетание элементов, комментариев, инструкций по обработке, cdata, текста и ссылок на сущности). |
Атрибут | Значение атрибута (часть внутри кавычек). |
Документ | Содержимое всего XML-документа; при этом применяются правила уровня документа. |
Средство чтения использует следующие действия для определения кодирования потока:
XmlParserContext.Encoding Проверяет свойство, чтобы определить кодировку.
Encoding
Если свойство имеет значениеnull
, средство чтения проверяет наличие метки порядка байтов в начале потока.Encoding
Если свойство имеетnull
значение и метка порядка байтов не найдена, средство чтения предполагает, что поток закодирован в UTF-8.
Если это средство чтения будет проверяться с помощью определения типа документа (DTD) (то есть ValidationType имеет значение ValidationType.DTD или ValidationType.Auto), XmlParserContext
указанное в конструкторе, должно предоставить все необходимые сведения DocumentType.
Примечание
Невозможно проверить фрагмент с помощью DTD. По определению DTD требуется загрузить весь документ для проверки.
Если это средство чтения будет проверять с помощью схем XML-Data сокращенного (XDR) или языка XSD, используйте Schemas свойство, чтобы указать XmlSchemaCollection , что содержит схемы (т XmlParserContext
. е. не требуется указывать сведения DocumentType).
См. также раздел
Применяется к
XmlValidatingReader(String, XmlNodeType, XmlParserContext)
Инициализирует новый экземпляр класса XmlValidatingReader
с использованием указанных значений.
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)
Параметры
- xmlFragment
- String
Строка, содержащая анализируемый фрагмент XML.
- fragType
- XmlNodeType
Тип XmlNodeType фрагмента XML. Также определяет содержимое строки фрагмента (см. таблицу ниже).
- context
- XmlParserContext
XmlParserContext, в котором анализируется фрагмент XML. Это включает в себя используемый класс NameTable, кодировку, область пространства имен, текущий xml:lang и область xml:space.
Исключения
fragType
не относится к одному из разрешенных типов узлов, перечисленных в таблице ниже.
Примеры
В следующем примере считывается фрагмент XML. Он использует XmlParserContext
и использует его XmlNamespaceManager для обработки сопоставления пространств имен.
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
Комментарии
Примечание
Класс XmlValidatingReader устарел в платформа .NET Framework 2.0. Проверяющий XmlReader экземпляр можно создать с помощью XmlReaderSettings класса и Create метода. Дополнительные сведения см. в подразделе "Примечания" на справочной странице XmlReader.
Этот конструктор анализирует заданную строку как фрагмент XML. Если фрагмент XML является элементом или атрибутом, можно обойти правила корневого уровня для хорошо сформированных XML-документов. Этот конструктор может обрабатывать строки, возвращенные из ReadInnerXml.
В следующей таблице перечислены допустимые значения и fragType
способы синтаксического анализа каждого из разных типов узлов.
Тип узла XML | Фрагмент может содержать |
---|---|
Элемент | Любое допустимое содержимое элемента (например, любое сочетание элементов, комментариев, инструкций по обработке, cdata, текста и ссылок на сущности). |
Атрибут | Значение атрибута (часть внутри кавычек). |
Документ | Содержимое всего XML-документа; при этом применяются правила уровня документа. |
Если это средство чтения будет проверяться с помощью определения типа документа (DTD) (то есть ValidationType имеет значение ValidationType.DTD или ValidationType.Auto), XmlParserContext
указанное в конструкторе, должно предоставить все необходимые сведения DocumentType.
Примечание
Проверить фрагмент с помощью DTD невозможно. По определению DTD требуется загрузить весь документ для проверки.
Если это средство чтения будет проверять с помощью схем XML-Data сокращенного (XDR) или языка XSD, используйте Schemas свойство, чтобы указать XmlSchemaCollection , что содержит схемы ( XmlParserContext
не требуется указывать сведения DocumentType).