Como localizar e substituir caracteres especiais em um arquivo XML com o Visual translation from VPE for Csharp .NET

Traduções deste artigo Traduções deste artigo
ID do artigo: 316063 - 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 translation from VPE for Csharp. 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. Referências de caractere numérico são expandidas imediatamente quando forem reconhecidos. Além disso, como referências de caractere numérico são tratadas como dados de caracteres, você pode usar as referências de caractere numérico

Se você declarar uma das seguintes duas entidades:
  • <
  • &
Você deve 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. Essa saída dupla é necessária para essas entidades para que referências a eles produzem um resultado bem formado.

Se você declarar qualquer um dos três seguintes entidades:
  • >
  • '
  • "
Você deve declará-los como entidades internas cujo texto de substituição é o único caractere que está sendo ignorado.

Determinar se você deve substituir um caractere especial

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

Quando você estiver usando o Microsoft .NET Framework, dados são recuperados e são armazenados em um objeto de DataSet . Quando você escreve 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 com as referências de caractere respectivos. Portanto, quando você escrever arquivos XML, e se você usar um DataSet , nenhum processo de substituição especial é necessário.

Necessário: Arquivo XML que contém dados XML de terceiros 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 .

Você receber a seguinte mensagem de erro 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.

Você receber a seguinte mensagem de erro quando é encontrado um colchete angular esquerdo:
O ' < ' caractere, valor hexadecimal 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 ('), o XmlReader e os objetos XmlDocument manipulam esses objetos porque esses caracteres exigem somente substituição de caractere.

Substituir caracteres especiais

Para substituir o e comercial e os caracteres de colchete angular esquerdo:
  1. Crie o arquivo XML.
  2. Criar o aplicativo .NET translation from VPE for Csharp Visual 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 .NET translation from VPE for Csharp

  1. Crie um novo aplicativo Visual translation from VPE for Csharp .NET Windows da seguinte maneira:
    1. Inicie o Microsoft Visual Studio NET..
    2. No menu arquivo , aponte para novo e, em seguida, clique em Project .
    3. Na caixa de diálogo New Project , clique em projetos do Visual translation from VPE for Csharp em Project Types e clique em Windows Application em modelos .
  2. Arraste um controle TextBox , dois controles Button e um controle DataGrid da caixa de ferramentas para o formulário padrão, Form1.cs.
  3. Defina a propriedade multilinha do TextBox como True .
  4. Importar os namespaces a seguir:
    using System.Xml;
    using System.IO;
    using System.Data.SqlClient;
    					
  5. Adicione o seguinte código após a função Main :
    string filepath = "C:\\Customers.xml";
    private void ReplaceSpecialChars(long linenumber)
            {
                System.IO.StreamReader strm;
                string strline;
                string strreplace = " ";
                string tempfile = "C:\\Temp.xml";
                try
                {
                    System.IO.File.Copy(filepath,tempfile,true);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    
                StreamWriter strmwriter = new StreamWriter(filepath);
                strmwriter.AutoFlush = true;
                strm = new StreamReader(tempfile);
                long i  = 0;
                while (i < linenumber - 1)
                {
                    strline = strm.ReadLine();
                    strmwriter.WriteLine(strline);
                    i = i + 1;
                }
    
                strline = strm.ReadLine();
                Int32 lineposition;
    		
                lineposition = strline.IndexOf("&");
                if (lineposition > 0) 
                {
                    strreplace = "&amp;";
                }
                else
                {
                    lineposition = strline.IndexOf("<",1);
                    if (lineposition > 0 )
                    {
                        strreplace = "<";
                    }
    
                }
                strline = strline.Substring(0, lineposition - 1) + strreplace + strline.Substring(lineposition + 1);
                strmwriter.WriteLine(strline);
    
                strline = strm.ReadToEnd();
                strmwriter.WriteLine(strline);
    
                strm.Close();
                strm = null;
    
                strmwriter.Flush();
                strmwriter.Close();
                strmwriter = null;
    
            }
    		
            public XmlDocument LoadXMLDoc() 
            {
            XmlDocument xdoc;
            long lnum;
    		
            try
            {
                xdoc = new XmlDocument();
                xdoc.Load(filepath);
            }
            catch (XmlException ex)
            {
                MessageBox.Show(ex.Message);
                lnum = ex.LineNumber;
                ReplaceSpecialChars(lnum);
    
                xdoc = LoadXMLDoc();
            }
        return (xdoc);
        }
    					
  6. Adicione o seguinte código ao evento Button1_Click :
    XmlDocument xmldoc = new XmlDocument();
            xmldoc = LoadXMLDoc();
            XmlNode nextnode; 
            nextnode = xmldoc.FirstChild.NextSibling;
            this.textBox1.Text = nextnode.OuterXml.ToString();
    					
  7. Adicione o seguinte código ao evento Button2_Click :
    DataSet ds = new DataSet();
                XmlDocument xdoc = new XmlDocument();
                SqlConnection cnNwind = new SqlConnection("Data source=myServerName;user id=myUser;Password=myPassword;Initial catalog=Northwind;");
                SqlDataAdapter daCustomers = new SqlDataAdapter("Select customerid,companyname,contactname, region from customers where region='WY'", cnNwind);
                string filepath = "C:\\Customers.xml";
                try
                {
                    daCustomers.Fill(ds, "Customers");
                    this.dataGrid1.DataSource = ds.Tables["Customers"];
                    ds.WriteXml(filepath);
                    xdoc.Load(filepath);
                    XmlNode nextnode; 
                    nextnode = xdoc.FirstChild.NextSibling;
                    textBox1.Text = nextnode.OuterXml.ToString();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    					
  8. Altere as propriedades na seqüência de conexão SqlConnection conforme necessário para o seu ambiente.
  9. Criar e executar o projeto.
  10. Clique em Button1 .

    Os erros que você recebe são consistentes com a descrição dos erros que são explicadas a Required: An XML file with special characters seção. Os dados XML aparecem na TextBox ; o e comercial é substituído por
  11. Clique em Button2 .

    No DataGrid , observe que companyname tem um e comercial e que o TextBox exibe 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: 316063 - Última revisão: quinta-feira, 29 de março de 2007 - Revisão: 4.4
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.0
  • Microsoft .NET Framework 1.1
Palavras-chave: 
kbmt kbgrpdsmsxml kbhowtomaster kbmsxml KB316063 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: 316063

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