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

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
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sumário
Este artigo descreve como substituir caracteres especiais em um arquivo XML (Extensible Markup Language) usando o Visual Basic. NET.

back to the top

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 NameEntity ReferenceCharacter ReferenceNumeric 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.

back to the top

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.

back to the top

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.

back to the top

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.
back to the top

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>				
back to the top

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.XmlImports System.IOImports 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
back to the top
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
back to the top

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 308060 - Última Revisão: 12/06/2015 05:42:44 - Revisão: 3.2

Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft .NET Framework 1.1, Microsoft .NET Framework 1.0

  • kbnosurvey kbarchive kbmt kbgrpdsmsxml kbhowtomaster kbmsxml KB308060 KbMtpt
Comentários
ERROR: at System.Diagnostics.Process.GetProcessHandle(Int32 access, Boolean throwIfExited) at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)