COMO: Localizar e substituir caracteres especiais num ficheiro 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 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: 308060
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Sumário
Este artigo descreve como substituir caracteres especiais num ficheiro XML (Extensible Markup Language) utilizando o Visual Basic. NET.

back to the top

Descrição da técnica

XML predefine as seguintes cinco referências de entidade para caracteres especiais que caso contrário, seria 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;


Pode utilizar referências de entidade e de caracteres para sair do Parêntese em ângulo esquerdo, o e comercial e outros delimitadores. Também pode utilizar referências de carácter numérico; estes são expandidas imediatamente quando forem reconhecidos e são tratados como dados de caracteres, para que possa utilizar as referências de carácter numérico

Se estiver declarar qualquer uma das seguintes duas entidades
  • lt
  • amp
tem de declará-los como entidades internas cujo texto de substituição é uma referência de carácter para o respectivo carácter (o parêntese em ângulo esquerdo ou o e comercial) que está a ser encerrada; sair dupla é necessário para estas entidades para que as referências aos mesmos produzem um resultado correcto.

Se estiver declarar qualquer uma das seguintes três entidades
  • gt
  • apos
  • quot
tem de declará-los como internas entidades cujo texto de substituição é o único carácter a ser encerradas.

back to the top

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

Não é necessário: Ficheiros XML de que os dados são recuperados a partir de uma base de dados

Quando utiliza o Microsoft .NET Framework, os dados são obtidos e armazenados num DataSet . Quando estiver a escrever dados a partir de um DataSet para um ficheiro XML utilizando o método WriteXml , os caracteres especiais que são referidos na secção "Sumário" são substituídos por referências respectivo carácter; assim, quando estiver a escrever ficheiros XML e estiver a utilizar um DataSet , nenhum processo de substituição especial é necessário.

back to the top

Necessário: Um ficheiro XML com caracteres especiais

Por vezes, o ficheiro XML ou os dados XML provém de um terceiro poderão utilizar estes caracteres especiais; neste cenário, os dados gera erros quando carrega no objecto XmlDocument ou um objecto XmlReader .

O seguinte erro é gerado quando é encontrado o carácter "e" comercial:
Ocorreu um erro ao análise entity_name, linha #, posicione #.
em que a linha # e coloque # representam a posição exacta do carácter especial.

Ocorre o erro seguinte quando é encontrado um parêntese em ângulo esquerdo:
O ' < ' carácter, hexadecimal valor 0x3C, não pode ser incluído num nome. Linha#, position #.
Nesta mensagem de erro, a linha # e # não indicam a posição onde o parêntese em ângulo esquerdo existe, mas quando é encontrado ao segundo Parêntese em ângulo esquerdo de posição.

Se o ficheiro XML contiver um parênteses de ângulo recto (>), uma aspa rectangular ('') ou um apóstrofo ('), estas são processadas pelo XmlReader e XmlDocument objectos uma vez que apenas substituição de carácter é necessária para estes caracteres.

back to the top

Substituir caracteres especiais

Para substituir o e comercial e os caracteres Parêntese em ângulo esquerdo:
  1. Crie o ficheiro XML.
  2. Crie a aplicação de Visual Basic .NET e, em seguida, insira o código.
back to the top

Criar o ficheiro XML

Copie e cole o seguinte código no bloco de notas e, em seguida, guarde o ficheiro como clientes.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 projecto do Visual Basic .NET

  1. Criar um novo Visual Basic .NET Windows aplicação.
  2. Utilize uma operação de arrastar e largar para mover uma caixa de texto , dois controlos do botão e um DataGrid .
  3. Defina a propriedade várias linhas da caixa de texto como true .
  4. Importar os espaços de nomes seguintes:
    Imports System.XmlImports System.IOImports System.Data.SqlClient					
  5. Depois da secção seguinte
    Inherits System.Windows.Forms.Form
    copie e cole o seguinte exemplo de código:
     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. Copiar e colar o seguinte código para o evento Click de Button1 :
    Dim xmldoc As New XmlDocument()        xmldoc = LoadXMLDoc()        Dim nextnode As XmlNode        nextnode = xmldoc.FirstChild.NextSibling        TextBox1.Text = nextnode.OuterXml					
  7. Copiar e colar o seguinte código para o 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 utilizador e a palavra-passe para ligar ao servidor que esteja a executar o Microsoft SQL Server.
  9. Criar o projecto e execute-lo.
  10. Clique em Button1 .

    Os erros que recebe são consistentes com a descrição de erros que são explicadas na secção "Necessário: um XML ficheiros com caracteres especiais". Os dados XML, em seguida, são apresentados na caixa de texto ; o e comercial é substituído pelo
  11. Clique em Button2.

    Em DataGrid companyname tem um "e" comercial e a caixa de texto mostra os dados XML
back to the top
Referências
Para obter informações adicionais, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
251354COMO: Localizar e substituir caracteres especiais num 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