XmlValidatingReader.ValidationEventHandler 事件
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
設定事件處理常式,用於接收文件類型定義 (DTD)、XML-Data Reduced (XDR) 結構描述和 XML 結構描述定義語言 (XSD) 結構描述驗證錯誤的相關資訊。
public:
event System::Xml::Schema::ValidationEventHandler ^ ValidationEventHandler;
public event System.Xml.Schema.ValidationEventHandler ValidationEventHandler;
member this.ValidationEventHandler : System.Xml.Schema.ValidationEventHandler
事件類型
範例
下列範例會根據 XML 架構來驗證檔案。
#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:
XmlTextReader^ txtreader;
XmlValidatingReader^ reader;
Boolean m_success;
public:
Sample()
{
txtreader = nullptr;
reader = nullptr;
m_success = true;
//Validate file against the XSD schema.
//The validation should fail.
Validate( "notValidXSD.xml" );
}
private:
void Validate( String^ filename )
{
try
{
Console::WriteLine( "Validating XML file {0}", filename );
txtreader = gcnew XmlTextReader( filename );
reader = gcnew XmlValidatingReader( txtreader );
// Set the validation event handler
reader->ValidationEventHandler += gcnew ValidationEventHandler( this, &Sample::ValidationEventHandle );
// Read XML data
while ( reader->Read() )
{}
Console::WriteLine( "Validation finished. Validation {0}", (m_success == true ? (String^)"successful" : "failed") );
}
finally
{
//Close the reader.
if ( reader != nullptr )
reader->Close();
}
}
//Display the validation error.
void ValidationEventHandle( Object^ /*sender*/, ValidationEventArgs^ args )
{
m_success = false;
Console::WriteLine( "\r\n\tValidation error: {0}", args->Message );
}
};
int main()
{
gcnew Sample;
}
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
public class Sample
{
private XmlTextReader txtreader = null;
private XmlValidatingReader reader = null;
private Boolean m_success = true;
public Sample ()
{
//Validate file against the XSD schema.
//The validation should fail.
Validate("notValidXSD.xml");
}
public static void Main ()
{
Sample validation = new Sample();
}
private void Validate(String filename)
{
try
{
Console.WriteLine("Validating XML file " + filename.ToString());
txtreader = new XmlTextReader (filename);
reader = new XmlValidatingReader (txtreader);
// Set the validation event handler
reader.ValidationEventHandler += new ValidationEventHandler (this.ValidationEventHandle);
// Read XML data
while (reader.Read()){}
Console.WriteLine ("Validation finished. Validation {0}", (m_success==true ? "successful" : "failed"));
}
finally
{
//Close the reader.
if (reader != null)
reader.Close();
}
}
//Display the validation error.
private void ValidationEventHandle (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 txtreader As XmlTextReader = Nothing
Private reader As XmlValidatingReader = Nothing
Private m_success As Boolean = True
Public Sub New()
'Validate file against the XSD schema.
'The validation should fail.
Validate("notValidXSD.xml")
End Sub
Public Shared Sub Main()
Dim validation As New Sample()
End Sub
Private Sub Validate(filename As String)
Try
Console.WriteLine("Validating XML file " & filename.ToString())
txtreader = New XmlTextReader(filename)
reader = New XmlValidatingReader(txtreader)
' Set the validation event handler
AddHandler reader.ValidationEventHandler, AddressOf Me.ValidationEventHandle
' Read XML data
While reader.Read()
End While
Console.WriteLine("Validation finished. Validation {0}", IIf(m_success, "successful", "failed"))
Finally
'Close the reader.
If Not (reader Is Nothing) Then
reader.Close()
End If
End Try
End Sub
'Display the validation error.
Private Sub ValidationEventHandle(sender As Object, args As ValidationEventArgs)
m_success = False
Console.WriteLine(ControlChars.CrLf & ControlChars.Tab & "Validation error: " & args.Message)
End Sub
End Class
此範例使用下列兩個輸入檔:
notValidXSD.xml
(屬性 xsi:schemaLocation
會識別 reader.) 的 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>
備註
注意
類別 XmlValidatingReader 在 .NET Framework 2.0 中已過時。 您可以使用 類別和 Create 方法建立驗證 XmlReader 實例 XmlReaderSettings 。 如需詳細資訊,請參閱 XmlReader 參考頁面的<備註>一節。
只有在指定 DTD、XDR、Schema 或 Auto 的 時 ValidationType ,才會發生 Read 這些事件。
如果未提供事件處理常式,則會在第一個驗證錯誤時擲回 , XmlException (Severity 等於 XmlSeverityType.Error) 。
注意
如果專案回報驗證錯誤,則不會驗證該專案的其餘內容模型,不過,其子系會經過驗證。 讀取器只會報告指定元素的第一個錯誤。
回呼處理常式可以使用 ValidationEventArgs.Severity 屬性來保證 XML 實例檔會根據架構進行驗證。 屬性 Severity
可讓您區分驗證錯誤, (嚴重性等於 XmlSeverityType.Error) 指出嚴重錯誤,而驗證警告 (嚴重性等於 XmlSeverityType.Warning) ,表示沒有可用的架構資訊。