COMO: Validar fragmentos XML contra um esquema XML no Visual Basic .NET

Traduções deste artigo Traduções deste artigo
ID do artigo: 317463 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo passo a passo descreve como usar objetos XmlValidatingReader e XMLSchemaCollection para validar um fragmento de XML (Extensible Markup Language) contra um esquema XML.

XmlValidatingReader implementa a classe XmlReader e fornece suporte para validação de dados XML. A propriedade de esquemas do XmlValidatingReader conecta-se o leitor aos arquivos de esquema em cache em um XmlSchemaCollection . A propriedade ValidationType do XmlValidatingReader Especifica o tipo de validação que o leitor deve executar. Se você definir a propriedade para ValidationType.None , você criará um leitor nonvalidating.

Você só pode adicionar esquemas XSD (XML Schema Definition Language) e esquemas (XML-Data REDUCED) para XmlSchemaCollection . Use o método Add com um URI de namespace para carregar esquemas. Para esquemas XML, o URI de namespace típica é a propriedade targetNamespace do esquema.

Requisitos

A lista a seguir descreve o hardware recomendado, software, infra-estrutura de rede e service packs que será necessário:
  • Microsoft Visual Studio .NET instalado em um compatível com sistema operacional Microsoft Windows
Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:
  • Visual Basic .NET
  • Padrões XML básicas
  • Esquemas XSD

Criar um esquema XSD

Cole o seguinte código em um novo arquivo de texto chamado C:\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:element name="comment" type="xsd:string" />
	<xsd:element name="author" type="authorName"/>
	<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:complexType name="bookstoreType">
		<xsd:sequence maxOccurs="unbounded">
			<xsd:element name="book" type="bookType" />
			<xsd:element ref="comment" minOccurs="0" />
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="bookType">
		<xsd:sequence>
			<xsd:element name="title" type="xsd:string" />
			<xsd:element ref="author" />
			<xsd:element name="price" type="xsd:decimal" />
		</xsd:sequence>
		<xsd:attribute name="genre" type="xsd:string" />
	</xsd:complexType>
	
</xsd:schema>
				

Criar um aplicativo do Visual Basic .NET

  1. Criar um novo Visual Basic .NET Windows aplicativo.
  2. Arraste Button1 para Form1. Cole o seguinte código para adicionar uma variável de membro particular à Classe Form1 :
    Dim m_success As Boolean
    					
  3. Cole o seguinte procedimento sub para criar um ValidationEventHandler gera erros de validação no objeto XMLValidatingReader :
    Public Sub ValidationEventHandle(ByVal sender As Object, ByVal args As ValidationEventArgs)
            m_success = False
            Console.WriteLine((ControlChars.CrLf & ControlChars.Tab & "Validation error: " & args.Message))
        End Sub 'ValidationEventHandle
    						
    Observação : você deve incluir um manipulador de eventos para receber informações sobre erros de validação no dados DTD type definition (), o XML-Data (REDUCED) esquema e o esquema de linguagem (XSD) de definição de esquema XML. O manipulador de eventos recebe um argumento do tipo ValidationEventArgs que contém dados relacionados a este evento.

    O manipulador de retorno de chamada pode utilizar a propriedade ValidationEventArgs.Severity para garantir que um documento de instância XML é validado em relação um esquema. A propriedade de gravidade permite distinguir entre um erro de validação ( gravidade é igual a XmlSeverityType.Error ) que indica um erro fatal e uma validação aviso ( gravidade é igual a XmlSeverityType.Warning ) que indica que nenhuma informação de esquema está disponível.
  4. Cole o seguinte código no procedimento de evento Button1_Click :
            Dim reader As XmlValidatingReader = Nothing
            Dim myschema As New XmlSchemaCollection()
    
            Try
                'Create the XML fragment to be parsed.
                Dim xmlFrag As String = "<author  xmlns='urn:bookstore-schema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>" & _
                                "<first-name>Herman</first-name>" & _
                               "<last-name>Melville</last-name>" & _
                             "</author>"
    
                'Create the XmlParserContext.
                Dim context As New XmlParserContext(Nothing, Nothing, "", XmlSpace.None)
               
                'Implement the reader. 
                reader = New XmlValidatingReader(xmlFrag, XmlNodeType.Element, context)
                'Add the schema.
                myschema.Add("urn:bookstore-schema", "Books.xsd")
    
                'Set the schema type and add the schema to the reader.
                reader.ValidationType = ValidationType.Schema
                reader.Schemas.Add(myschema)
    
                'Add the handler to raise the validation event.
                AddHandler reader.ValidationEventHandler, AddressOf Me.ValidationEventHandle
    
                While reader.Read
    
                End While
                Console.WriteLine("Completed validating xmlfragment")
    
            Catch XmlExp As XmlException
                Console.WriteLine(XmlExp.Message)
            Catch XmlSchExp As XmlSchemaException
                Console.WriteLine(XmlSchExp.Message)
            Catch GenExp As Exception
                Console.WriteLine(GenExp.Message)
            End Try
        End Sub
    					
  5. Quando a seguinte mensagem é exibida na janela de saída, o fragmento XML é um elemento válido:
    Completed validating xmlfragment
    					
Observação : O objeto XMLValidatingReader valida as declarações de tipo e os elementos de nível superior no esquema XML. Fragmentos XML, como elementos de sub-rotina, são considerados local. Você não pode passar fragmentos XML para XmlValidatingReader para validação direta, a menos que você declara os fragmentos XML como elementos de nível superior e definir a referência a nível necessário de.

Referências

Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
307379COMO: Validar um documento XML com o DTD, XDR ou XSD no Visual translation from VPE for Csharp .NET
313826INFO: Guia para esquemas XML no .NET Framework
313651INFO: Guia para XML no .NET Framework
Para obter informações adicionais, consulte o MSDN seguinte sites:
Namespace System.XML
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemxml.asp

XML Web Services
http://msdn.microsoft.com/xml

Propriedades

ID do artigo: 317463 - Última revisão: quarta-feira, 3 de setembro de 2003 - Revisão: 2.2
A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
Palavras-chave: 
kbmt kbhowtomaster KB317463 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 317463

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com