Comment rechercher et remplacer des caractères spéciaux dans un fichier XML avec Visual C# .NET

Traductions disponibles Traductions disponibles
Numéro d'article: 316063 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article explique comment remplacer des caractères spéciaux dans un fichier XML (Extensible Markup Language) à l'aide de Visual C# .NET.

Description de la technique

XML prédéfinit les références entité cinq suivantes des caractères spéciaux qui serait autrement être interprétées comme partie du langage de balisage :

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;


Vous pouvez utiliser références entité et de caractères pour fermez le chevron gauche, le « et » commercial et autres séparateurs. Vous pouvez également utiliser des références de caractère numérique. Références de caractère numérique sont développés immédiatement une fois qu'ils sont reconnus. En outre, comme les références de caractère numérique sont considérés comme données de caractères, vous pouvez utiliser les références de caractère numérique

Si vous déclarez une des deux entités suivantes :
  • <
  • &
vous devez déclarer les comme entités internes dont texte de remplacement est une référence de caractère sur le caractère correspondant (le chevron gauche ou le et commercial) qui est en cours échappement. Cette double évitement est requise pour ces entités afin que les références à les générer un résultat formé correctement.

Si vous déclarez des entités trois suivantes :
  • >
  • '
  • "
vous devez déclarer les comme entités internes dont texte de remplacement est le caractère est en cours échappement.

Déterminer si vous devez remplacer un caractère spécial

Non requis : fichier XML dans lequel les données sont récupérées à partir d'une base de données

Lorsque vous utilisez le Microsoft .NET Framework, données sont extrait et sont stockées dans un objet DataSet . Lorsque vous écrivez données d'un DataSet dans un fichier XML à l'aide de la méthode WriteXml , les caractères spéciaux qui sont référencés dans la section « Résumé sont remplacés par les références de caractères correspondant. Par conséquent, lorsque vous écrivez des fichiers XML et si vous utilisez un DataSet , aucun processus de remplacement spécial n'est nécessaire.

Requis : fichier de XML contenant tierce partie des données XML avec des caractères spéciaux

Parfois, le fichier XML ou les données XML provenant d'un tiers peuvent utiliser ces caractères spéciaux. Dans ce scénario, les données génère des erreurs lorsque vous chargez elle dans un objet XmlDocument ou un objet XmlReader .

Le message d'erreur suivant s'affiche lorsque le caractère « et commercial » se produit :
Une erreur s'est produite lors de l'analyse entity_name, ligne #, placez #.
où ligne # et placez # représente la position exacte du caractère spécial.

Vous recevez le message d'erreur suivantes lorsque rencontre un chevron gauche :
Le « < » caractère, la valeur hexadécimale 0x3C, ne peut pas être inclus dans un nom. Ligne#, position #.
Dans ce message d'erreur, la ligne # et la position # n'indiquent pas la position où le chevron gauche existe, mais où le deuxième chevron gauche est détectée.

Si le fichier XML contient chevron droit (>), un guillemet droit ('') ou une apostrophe ('), le XmlReader et les objets XmlDocument gérer ces objets parce que ces caractères nécessitent uniquement caractère remplacement.

Remplacer les caractères spéciaux

Pour remplacer le « et » commercial et les caractères chevron gauche :
  1. Créer le fichier XML.
  2. Créer l'application Visual C# .NET et insérez le code.

Créer le fichier XML

Copiez et collez le code suivant dans le bloc-notes et puis enregistrez le fichier en tant que 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>
				

Créer projet Visual C# .NET

  1. Créer une nouvelle application Visual C# .NET Windows comme suit :
    1. Démarrez Microsoft Visual Studio .NET.
    2. Dans le menu Fichier , pointez sur Nouveau , puis cliquez sur projet .
    3. Dans la boîte de dialogue Nouveau projet , cliquez sur projets Visual C# sous types de projet , puis cliquez sur application Windows sous modèles .
  2. Faites glisser un contrôle TextBox , deux contrôles Button et un contrôle DataGrid de la boîte à outils à votre formulaire par défaut, Form1.cs.
  3. Définir la propriété Multiline de la zone de texte sur True .
  4. Importer les espaces de noms suivants :
    using System.Xml;
    using System.IO;
    using System.Data.SqlClient;
    					
  5. Ajoutez le code suivant après la fonction 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. Ajoutez le code suivant à l'événement Button1_Click :
    XmlDocument xmldoc = new XmlDocument();
            xmldoc = LoadXMLDoc();
            XmlNode nextnode; 
            nextnode = xmldoc.FirstChild.NextSibling;
            this.textBox1.Text = nextnode.OuterXml.ToString();
    					
  7. Ajoutez le code suivant à l'événement 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. Modifier les propriétés dans la chaîne de connexion SqlConnection que nécessaire pour votre environnement.
  9. Générez et exécutez le projet.
  10. Cliquez sur Button1 .

    Les erreurs que vous recevez sont cohérentes avec la description des erreurs qui sont décrites dans le Required: An XML file with special characters section. Les données XML s'affiche dans la zone de texte ; le « et » commercial est remplacé par
  11. Cliquez sur button2 .

    Dans la grille de données , vous remarquerez que companyname un et commercial et que la zone de texte affiche les données XML avec

Références

Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
251354 Comment rechercher et remplacer des caractères spéciaux dans un document XML avec Visual Basic

Propriétés

Numéro d'article: 316063 - Dernière mise à jour: jeudi 29 mars 2007 - Version: 4.4
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual C# .NET 2003 Initiation
  • Microsoft Visual C# .NET 2002 Initiation
  • Microsoft .NET Framework 1.0
  • Microsoft .NET Framework 1.1
Mots-clés : 
kbmt kbgrpdsmsxml kbhowtomaster kbmsxml KB316063 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 316063
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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