Come individuare e sostituire caratteri speciali in un file XML con Visual C# .NET

Traduzione articoli Traduzione articoli
Identificativo articolo: 316063 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo viene descritto come sostituire i caratteri speciali in un file Extensible Markup Language (XML) utilizzando Visual C# .NET.

Descrizione della tecnica

XML sono disponibili i seguenti cinque riferimenti di entitÓ per i caratteri speciali che verrebbero altrimenti interpretati come parte del linguaggio di markup:

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;


╚ possibile utilizzare riferimenti di entitÓ e il carattere di escape la parentesi angolare sinistra, la e commerciale e gli altri delimitatori. ╚ inoltre possibile utilizzare riferimenti a caratteri numerici. Riferimenti a caratteri numerici vengono espansi immediatamente quando esse sono riconosciute. Inoltre, poichÚ i riferimenti ai caratteri numerici vengono considerati come dati di tipo carattere, Ŕ possibile utilizzare i riferimenti a caratteri numerici

Se si dichiara una delle due seguenti entitÓ:
  • &amp;
Ŕ necessario dichiararli come entitÓ interne il cui testo di sostituzione Ŕ un riferimento a carattere nel carattere corrispondente (la parentesi angolare sinistra o la e commerciale) Ŕ sottoposto a escape. Questa sequenze di escape doppie Ŕ necessaria per queste entitÓ in modo che i riferimenti a essi producono un risultato corretto.

Se si dichiara una delle tre entitÓ:
  • >
  • '
  • "
Ŕ necessario dichiararli come entitÓ interne il cui testo di sostituzione Ŕ il singolo carattere Ŕ sottoposto a escape.

Determinare se Ŕ necessario sostituire un carattere speciale

Non richiesto: file XML in cui i dati vengono recuperati da un database

Quando si utilizza il Microsoft.NET Framework, dati viene recuperati e memorizzati in un oggetto DataSet . Quando si scrivono dati da un DataSet in un file XML utilizzando il metodo WriteXml , i caratteri speciali in cui vengono fatto riferimento nella sezione "Sommario" sono sostituiti con i riferimenti di carattere corrispondente. Pertanto, quando si scrivono file XML e se si utilizza un DataSet, non Ŕ necessario alcun processo di sostituzione speciali.

Richiesto: File XML contenente dati XML di terze parti con caratteri speciali

In alcuni casi il file XML o dati XML provenienti da terze parti possono utilizzare questi caratteri speciali. In questo scenario, i dati generati errori quando si carica in un oggetto XmlDocument o in un oggetto XmlReader .

Viene visualizzato il seguente messaggio di errore quando viene rilevato il carattere e commerciale:
Si Ŕ verificato un errore durante l'analisi nome_entitÓ, riga #, posizione #.
dove riga # e la posizione # rappresentano la posizione esatta del carattere speciale.

Quando viene rilevata una parentesi angolare sinistra, viene visualizzato il seguente messaggio di errore:
Il '<' character,="" hexadecimal="" value="" 0x3c,cannot="" be="" included="" in="" a="" name.=""></'> #, posizione #.
In questo messaggio di errore, la riga # e la posizione # non indicano la posizione in cui Ŕ presente la parentesi angolare sinistra, ma dove viene rilevata la seconda parentesi angolare sinistra.

Se il file XML contiene una parentesi angolare destra (&gt;), virgolette singole (') o un apostrofo ('), oggetti XmlDocument e XmlReader gestire questi oggetti perchÚ questi caratteri richiedono solo sostituzione del singolo carattere.

Sostituire i caratteri speciali

Per sostituire la e commerciale e i caratteri della parentesi angolare sinistra:
  1. Creare il file XML.
  2. Creare l'applicazione Visual C# .NET e quindi inserire il codice.

Creare il file XML

Copiare e incollare il codice seguente nel blocco note e quindi salvare il file come Customers:
<?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>
				

Creare il progetto di Visual C# .NET

  1. Creare una nuova applicazione Windows di Visual C# .NET come segue:
    1. Avviare Microsoft Visual Studio .NET.
    2. Scegliere Nuovodal menu File , quindi progetto.
    3. Nella finestra di dialogo Nuovo progetto scegliere Progetti di Visual C# in Tipi progettoe quindi fare clic su Applicazione Windows in modelli.
  2. Trascinare un controllo TextBox , due controlli Button e un controllo DataGrid dalla casella degli strumenti al form predefinito, Form1. cs.
  3. Impostare la proprietÓ Multiline della casella di testo su True.
  4. Importare gli spazi dei nomi seguenti:
    using System.Xml;
    using System.IO;
    using System.Data.SqlClient;
    					
  5. Aggiungere il codice seguente dopo la funzione 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. Aggiungere il codice seguente all'evento Button1_Click :
    XmlDocument xmldoc = new XmlDocument();
            xmldoc = LoadXMLDoc();
            XmlNode nextnode; 
            nextnode = xmldoc.FirstChild.NextSibling;
            this.textBox1.Text = nextnode.OuterXml.ToString();
    					
  7. Aggiungere il codice seguente all'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. Modificare le proprietÓ nella stringa di connessione SqlConnection come necessario per l'ambiente.
  9. Compilare ed eseguire il progetto.
  10. Fare clic su Button1.

    Gli errori che ricevono sono coerenti con la descrizione degli errori che sono spiegati nel Obbligatorio: Un file XML con caratteri speciali . I dati XML viene visualizzato nella casella di testo; la e commerciale viene sostituita con
  11. Fare clic su Button2.

    Nel controllo DataGrid, si noti che companyname ha una e commerciale e che la casella di testo consente di visualizzare i dati XML con

Riferimenti

Per ulteriori informazioni, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:
251354 Come individuare e sostituire caratteri speciali in un documento XML con Visual Basic

ProprietÓ

Identificativo articolo: 316063 - Ultima modifica: sabato 8 febbraio 2014 - Revisione: 6.0
Le informazioni in questo articolo si applicano 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
Chiavi:á
kbgrpdsmsxml kbhowtomaster kbmsxml kbmt KB316063 KbMtit
Traduzione automatica articoli
IMPORTANTE: il presente articolo Ŕ stato tradotto tramite un software di traduzione automatica di Microsoft ed eventualmente revisionato dalla community Microsoft tramite la tecnologia CTF (Community Translation Framework) o da un traduttore professionista. Microsoft offre articoli tradotti manualmente e altri tradotti automaticamente e rivisti dalla community con l?obiettivo di consentire all'utente di accedere a tutti gli articoli della Knowledge Base nella propria lingua. Tuttavia, un articolo tradotto automaticamente, anche se rivisto dalla community, non sempre Ŕ perfetto. Potrebbe contenere errori di vocabolario, di sintassi o di grammatica. Microsoft declina ogni responsabilitÓ per imprecisioni, errori o danni causati da una traduzione sbagliata o dal relativo utilizzo da parte dei clienti. Microsoft aggiorna frequentemente il software e gli strumenti di traduzione automatica per continuare a migliorare la qualitÓ della traduzione.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 316063
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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