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 |
< |
< |
&#60; |
| Right angle bracket |
> |
> |
> |
| Straight quotation mark |
" |
" |
' |
| Apostrophe |
' |
' |
" |
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:
- Crie o arquivo XML.
- 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
- Crie um novo aplicativo Visual translation from VPE for Csharp .NET Windows da seguinte maneira:
- Inicie o Microsoft Visual Studio NET..
- No menu arquivo , aponte para novo e, em seguida, clique em Project .
- 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 .
- Arraste um controle TextBox , dois controles Button e um controle DataGrid da caixa de ferramentas para o formulário padrão, Form1.cs.
- Defina a propriedade multilinha do TextBox como True .
- Importar os namespaces a seguir:
using System.Xml;
using System.IO;
using System.Data.SqlClient;
- 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 = "&";
}
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);
}
- 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();
- 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);
}
- Altere as propriedades na seqüência de conexão SqlConnection conforme necessário para o seu ambiente.
- Criar e executar o projeto.
- 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 - Clique em Button2 .
No DataGrid , observe que companyname tem um e comercial e que o TextBox exibe os dados XML com
Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
251354
(http://support.microsoft.com/kb/251354/
)
Como localizar e substituir caracteres especiais em um documento XML com o Visual Basic
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
| kbmt kbgrpdsmsxml kbhowtomaster kbmsxml KB316063 KbMtpt |
Tradução automáticaIMPORTANTE: 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
(http://support.microsoft.com/kb/316063/en-us/
)