COMO: Localizar e substituir caracteres especiais em um arquivo XML com o Visual Basic .NET

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

Neste artigo

Sumário

Este artigo descreve como substituir caracteres especiais em um arquivo XML (Extensible Markup Language) usando o Visual Basic. NET.

Descrição da técnica

XML predefine as referências de entidade cinco seguintes para caracteres especiais caso contrário, devem ser interpretados como parte da linguagem de marcação:

Character Name Entity Reference Character Reference Numeric Reference
Ampersand & & &
Left angle bracket &lt; < &#38;#60;
Right angle bracket &gt; > &#62;
Straight quotation mark &quot; " &#39;
Apostrophe &apos; ' &#34;


Você pode usar referências de entidade e caractere para o colchete angular esquerdo, o e comercial e outros delimitadores de escape. Você também pode usar referências de caractere numérico; eles são expandidos imediatamente quando forem reconhecidos e elas são tratadas como dados de caracteres, para que poder usar as referências de caractere numérico

Se você é declarando um dos seguintes duas entidades
  • lt
  • amp
Você precisa declará-los como entidades internas cujo texto de substituição é uma referência caracteres para o respectivo caractere (o colchete angular esquerdo ou o e comercial) que está sendo ignorado; saída dupla é necessária para essas entidades para que referências a eles produzem um resultado bem formado.

Se são declarar qualquer um dos três seguintes entidades
  • gt
  • apos
  • quot
Você precisa declará-los como internas entidades cujo texto de substituição é o único caractere que está sendo ignorado.

Determinar se uma substituição de caracteres especial é necessária

Não necessário: Arquivos XML no qual os dados é recuperados de um banco de dados

Quando você estiver usando o Microsoft .NET Framework, os dados são recuperados e armazenados em um DataSet . Quando você estiver escrevendo dados de um DataSet para um arquivo XML usando o método WriteXml , os caracteres especiais que são referenciados na seção "Resumo" são substituídos por referências respectivos caractere; portanto, quando você está gravando arquivos XML e você estiver usando um DataSet , nenhum processo de substituição especial é necessário.

Requerido: Um arquivo XML com caracteres especiais

Às vezes, o arquivo XML ou os dados XML provenientes de um terceiro podem usar esses caracteres especiais; nesse cenário, os dados gera erros quando você carregá-lo em um objeto XmlDocument ou um objeto XmlReader .

O seguinte erro é gerado quando o caractere e comercial é encontrado:
Erro ao analisar entity_name, a linha #, posição #.
onde a linha # e posicione # representam a posição exata do caractere especial.

O seguinte erro ocorre quando um colchete angular esquerdo é encontrado:
O ' < ' caractere hexadecimal valor 0x3C, não pode ser incluído em um nome. Linha#, position #.
Nessa mensagem de erro, a linha # e a posição # não indicam a posição onde o colchete angular esquerdo existe, mas onde o segundo colchete angular esquerdo é encontrado.

Se o arquivo XML contém um colchete angular direito (>), aspas normais ("") ou um apóstrofo ('), esses são manipuladas pela XmlReader e XmlDocument objetos porque somente o caractere substituição é necessária para esses caracteres.

Substituir caracteres especiais

Para substituir o e comercial e os caracteres de colchete angular esquerdo:
  1. Crie o arquivo XML.
  2. Criar o aplicativo Visual Basic .NET e, em seguida, insira o código.

Criar o arquivo XML

Copie e cole o seguinte código no bloco de notas e, em seguida, salve o arquivo como customers.xml :
<?xml version="1.0" standalone="yes"?>
<Customers>
<Customer>
<CustomerID>BLAUS</CustomerID>
<CompanyName>Blauer See Delikatessen</CompanyName>
<ContactName>Hanna Moos</ContactName>
<Region>test<ing</Region>
</Customer>
<Customer>
<CustomerID>SPLIR</CustomerID>
<CompanyName>Split Rail Beer & Ale</CompanyName>
<ContactName>Art raunschweiger</ContactName>
<Region>WY</Region>
</Customer>
</Customers>
				

Criar projeto do Visual Basic .NET

  1. Criar um novo Visual Basic .NET Windows aplicativo.
  2. Use uma operação de arrastar-e-soltar para mover um TextBox , dois controles Button e um DataGrid .
  3. Defina a propriedade multilinha do TextBox como True .
  4. Importar os namespaces a seguir:
    Imports System.Xml
    Imports System.IO
    Imports System.Data.SqlClient
    					
  5. Após a seção a seguir
    Inherits System.Windows.Forms.Form
    copiar e colar o exemplo de código a seguir:
     Dim filepath As String = "C:\customers.xml"
    Private Sub ReplaceSpecialChars(ByVal linenumber As Long)
            Dim strm As StreamReader
            Dim strline As String
            Dim strreplace As String
    
            Dim tempfile As String = "C:\temp.xml"
            Try
                FileCopy(filepath, tempfile)
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
    
            Dim strmwriter As New StreamWriter(filepath)
            strmwriter.AutoFlush = True
    
            strm = New StreamReader(tempfile)
    
    
            Dim i As Long = 0
            While i < linenumber - 1
                strline = strm.ReadLine
                strmwriter.WriteLine(strline)
                i = i + 1
            End While
    
            strline = strm.ReadLine
            Dim lineposition As Int32
            lineposition = InStr(strline, "&")
            If lineposition > 0 Then
                strreplace = "&amp;"
            Else
                lineposition = InStr(2, strline, "<")
                If lineposition > 0 Then
                    strreplace = "<"
                End If
            End If
            strline = Mid(strline, 1, lineposition - 1) + strreplace + Mid(strline, lineposition + 1)
            strmwriter.WriteLine(strline)
    
            strline = strm.ReadToEnd
            strmwriter.WriteLine(strline)
    
            strm.Close()
            strm = Nothing
    
            strmwriter.Flush()
            strmwriter.Close()
            strmwriter = Nothing
    
        End Sub
    
        Public Function LoadXMLDoc() As XmlDocument
            Dim xdoc As XmlDocument
            Dim lnum As Long
            Dim pos As Long
            Dim Newxml As String
            Try
                xdoc = New XmlDocument()
                xdoc.Load(filepath)
            Catch ex As XmlException
                MessageBox.Show(ex.Message)
                lnum = ex.LineNumber
                ReplaceSpecialChars(lnum)
    
                xdoc = LoadXMLDoc()
    
            End Try
            Return (xdoc)
        End Function
    					
  6. Copie e cole o código a seguir no evento Click do Button1 :
    Dim xmldoc As New XmlDocument()
            xmldoc = LoadXMLDoc()
            Dim nextnode As XmlNode
            nextnode = xmldoc.FirstChild.NextSibling
            TextBox1.Text = nextnode.OuterXml
    					
  7. Copie e cole o código a seguir no evento Click de Button2 :
    Dim ds As New DataSet()
            Dim xdoc As New XmlDocument()
            Dim cnNwind As New SqlConnection("Data source=myservername;user id=myuser;Password=mypassword;Initial catalog=Northwind;")
            Dim daCustomers As New SqlDataAdapter("Select customerid,companyname,contactname, region from customers where region='WY'", cnNwind)
            Dim filepath As String
            Try
                daCustomers.Fill(ds, "Customers")
                DataGrid1.DataSource = ds.Tables(0)
                ds.WriteXml("C:\Dataset.xml")
                xdoc.Load("C:\Dataset.xml")
                Dim nextnode As XmlNode
                nextnode = xdoc.FirstChild.NextSibling
                TextBox1.Text = nextnode.OuterXml.ToString
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
    					
  8. Alterar o nome do servidor, o nome de usuário e a senha para se conectar ao servidor que está executando o Microsoft SQL Server.
  9. Criar o projeto e execute a ele.
  10. Clique em Button1 .

    Os erros que você recebe são consistentes com a descrição dos erros que são explicados na seção "Necessário: um XML arquivo com caracteres especiais". Os dados XML, em seguida, são exibidos no TextBox ; o e comercial é substituído com
  11. Clique em Button2.

    DataGrid , companyname tem um e comercial em TextBox mostra os dados XML com

Referências

Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
251354COMO: Localizar e substituir caracteres especiais em um documento XML com o Visual Basic

Propriedades

ID do artigo: 308060 - Última revisão: quarta-feira, 3 de setembro de 2003 - Revisão: 3.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 kbgrpdsmsxml kbhowtomaster kbmsxml KB308060 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: 308060

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