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

Traduções de Artigos Traduções de Artigos
Artigo: 317463 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo passo a passo descreve como utilizar objectos XmlValidatingReader e XMLSchemaCollection para validar um fragmento de XML (Extensible Markup Language) com um esquema XML.

XmlValidatingReader implementa a classe XmlReader e fornece suporte para validação de dados XML. A propriedade de esquemas de XmlValidatingReader liga o leitor os ficheiros de esquema em cache num XmlSchemaCollection . A propriedade ValidationType XmlValidatingReader Especifica o tipo de validação que deve executar o leitor. Se definir a propriedade para ValidationType.None , pode criar um leitor nonvalidating.

Só pode adicionar esquemas de idiomas de definição de esquema de XML (XSD) e (XML-data REDUCED) esquemas XmlSchemaCollection . Utilize o método Add com um URI de espaço de nomes para carregar esquemas. Para esquemas XML, o espaço de nomes normal URI é a propriedade targetNamespace do esquema.

Requisitos

A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs, terá de:
  • Microsoft Visual Studio .NET instalado num sistema operativo Microsoft Windows compatível
Este artigo pressupõe que está familiarizado com os seguintes tópicos:
  • Visual Basic .NET
  • Padrões de XML básicos
  • Esquemas XSD

Criar um esquema XSD

Cole o seguinte código num novo ficheiro de texto denominado 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 uma aplicação do Visual Basic .NET

  1. Criar um novo Visual Basic .NET Windows aplicação.
  2. Arraste Button1 ao Form1. Cole o seguinte código para adicionar uma variável de membro privado à Classe Form1 :
    Dim m_success As Boolean
    					
  3. Cole o seguinte procedimento para criar um ValidationEventHandler que desencadeia erros de validação no objecto XMLValidatingReader sub:
    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
    						
    Nota : tem de incluir um processador de eventos para receber informações sobre erros de validação no dados DTD (Type Definition), os dados XML (REDUCED) esquema e o esquema XML do esquema definição de idioma (XSD). O processador de eventos recebe um argumento do tipo ValidationEventArgs que contém dados relacionados com este evento.

    O processador de chamada de retorno pode utilizar a propriedade ValidationEventArgs.Severity para garantir que um documento de instância XML é validado contra um esquema. A propriedade gravidade permite-lhe distinguir entre um erro de validação ( gravidade é igual a XmlSeverityType.Error ) que indica um erro fatal e validação de uma aviso ( gravidade é igual a XmlSeverityType.Warning ) que indica que não existem informações de esquema estão disponíveis.
  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 é apresentada a seguinte mensagem na janela de resultados, o fragmento de XML é um elemento válido:
    Completed validating xmlfragment
    					
Nota : O objecto XMLValidatingReader valida apenas as declarações de tipo e os elementos de nível superior no esquema XML. Fragmentos XML, tais como elementos sub, são considerados locais. Não é possível passar fragmentos XML para XmlValidatingReader directa validação a menos que declare os fragmentos XML como elementos de nível superior e definir a referência ao nível do necessário.

Referências

Para obter informações adicionais, clique nos números de artigo existentes abaixo para visualizar os artigos na Microsoft Knowledge Base:
307379COMO: Validar um documento XML utilizando o DTD, XDR ou XSD no Visual C# .NET
313826INFO: Guia para esquemas XML no .NET Framework
313651INFO: Guia para XML no .NET Framework
Para mais informações, consulte a MSDN seguinte Web sites:
Espaço de nomes System.XML
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemxml.asp

Serviços Web XML
http://msdn.microsoft.com/xml

Propriedades

Artigo: 317463 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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