COMO: Localizar e substituir caracteres especiais num ficheiro XML com o Visual Basic .NET

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

Nesta página

Sumário

Este artigo descreve como substituir caracteres especiais num ficheiro XML (Extensible Markup Language) utilizando o Visual Basic. NET.

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 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;


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.

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.

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.

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.

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>
				

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.Xml
    Imports System.IO
    Imports 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

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

Propriedades

Artigo: 308060 - Última revisão: 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 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

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