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

Riepilogo

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

Torna all'inizio

Descrizione della tecnica

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



È possibile utilizzare riferimenti di entità e i caratteri di escape della 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 uno dei due seguenti entità:
  • <
  • &amp;
è necessario dichiararli come entità interne, il cui testo di sostituzione è un riferimento di carattere per il carattere corrispondente (la parentesi angolare sinistra o la e commerciale) che da caratteri di 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à:
  • >
  • & apos;
  • & quot;
è necessario dichiararli come entità interne, il cui testo di sostituzione è il carattere di singolo sequenza di escape.

Torna all'inizio

Determinare se è necessario sostituire un carattere speciale

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

Quando si utilizza il Microsoft.NET Framework, i dati recuperati e viene 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" vengono 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.

Torna all'inizio

È necessario: File XML contenente i 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 viene caricato in un oggetto XmlDocument o 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 #, #di posizione.
in linea # e # posizione rappresentano la posizione esatta del carattere speciale.

Quando viene rilevata una parentesi angolare sinistra, viene visualizzato il seguente messaggio di errore:
La ' <' carattere, il valore esadecimale 0x3C, non può essere incluso in un nome. Riga #, #di posizione.
In questo messaggio di errore, la riga # e # di posizione non indicano la posizione in cui è presente la parentesi angolare sinistra, ma in cui viene rilevata la seconda parentesi angolare sinistra.

Se il file XML contiene una parentesi angolare chiusa (>), virgolette (") o un apostrofo ('), oggetti XmlDocument e XmlReader gestire questi oggetti in quanto tali caratteri richiedono solo la sostituzione del singolo carattere.

Torna all'inizio

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.
Torna all'inizio

Creare il file XML

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

Torna all'inizio

Creare il progetto di Visual C# .NET

  1. Creare una nuova applicazione Windows Visual C# .NET come segue:
    1. Avviare Microsoft Visual Studio .NET.
    2. Dal menu File , scegliere Nuovo, 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. Dalla casella degli strumenti trascinare un controllo TextBox , due controlli Button e un controllo DataGrid al form predefinito, Form1. cs.
  3. Impostare la proprietà Multiline di TextBox 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 necessarie 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 vengono spiegate la necessaria: file XML con caratteri speciali sezione. 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 Visualizza i dati XML con
Torna all'inizio

Riferimenti

Per ulteriori informazioni, fare clic sul numero riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:

Come trovare e sostituire caratteri speciali in un documento XML con Visual Basic 251354

Torna all'inizio
Proprietà

ID articolo: 316063 - Ultima revisione: 30 gen 2017 - Revisione: 1

Feedback