2010-06-11 6 views
1

J'ai un xmlWriter et je veux écrire une chaîne qui contient des caractères de "/" "<" ">" (qui font partie de la syntaxe xml et cassent le code xml). Voici mon code C#:C# XMLWriter + empêcher "/" "<" "<" caractères

public Boolean Initialize(String path) 
    { 
     Boolean result = true; 

      XmlWriterSettings settings = new XmlWriterSettings(); 
      settings.CheckCharacters = true; 
      settings.Encoding = Encoding.UTF8; 
      settings.Indent = true; 

      xmlWriter = XmlWriter.Create(path, settings); 

      xmlWriter.WriteStartDocument(); 
      xmlWriter.WriteStartElement("TestData"); 
      isInitialized = true; 

     return result; 
    } 

public void WriteProducts(List<Product> productList) 
    { 
     if (isInitialized == true) 
     { 
      foreach (Product product in productList) 
      { 
       xmlWriter.WriteStartElement("Product"); 

       xmlWriter.WriteElementString("Id", product.ProdId); 
       xmlWriter.WriteElementString("Name", product.ProdName); 
       xmlWriter.WriteElementString("GroupId", product.ProdGroup); 
       xmlWriter.WriteElementString("Price", product.ProdPrice.ToString((Consts.FORMATTED_PRICE))); 

       xmlWriter.WriteEndElement(); 
      } 
     } 
    } 

public void Close() 
    { 
     xmlWriter.WriteEndElement(); 
     xmlWriter.WriteEndDocument(); 
    } 

L'application fonctionne sans erreur, mais si je regarde dans le fichier xml, le xml est incomplet parce que le xmlwriter cesse d'écrire les nœuds de produit lorsqu'un nom de produit contient l'un des plus haut personnages mentionnés.

Existe-t-il un moyen de résoudre ce problème?

Répondre

0

Vous pouvez soit utiliser WriteRaw ou joindre le contenu <![CDATA[ content goes here ]]>

-1

Vous pouvez utiliser la méthode Server.HtmlEncode(string) de la classe System.Web.HttpServerUtility (cela vous avez besoin d'ajouter l'assemblage), qui transformera <-&lt; (par exemple)

et puis utilisez Server.HtmlDecode(string) pour transformer &lt; Retour à <

+1

Pourquoi les downvotes? Au moins vous pourriez expliquer ... – Shimrod

1

S'il est par exemple product.ProdName qui peut contenir les caractères que vous pouvez faire ceci:

xmlWriter.WriteStartElement("Product"); 

xmlWriter.WriteElementString("Id", product.ProdId); 

xmlWriter.WriteStartElement("Name"); 
xmlWriter.WriteString(product.ProdName); // or xmlWriter.WriteCData(product.ProdName); 
xmlWriter.WriteEndElement(); 

xmlWriter.WriteElementString("GroupId", product.ProdGroup); 
xmlWriter.WriteElementString("Price", product.ProdPrice.ToString((Consts.FORMATTED_PRICE))); 

xmlWriter.WriteEndElement(); 
+0

J'ai essayé la suggestion de Dons et cela semble fonctionner. Au moins, il écrit plus de données dans le fichier xml qu'avant. Cependant, le fichier xml est toujours incomplet car il arrête d'écrire un nom de produit qui n'a pas de caractères spéciaux. Est-ce peut-être parce que le fichier est trop gros? 1MB et 38789 lignes – flurreh

+0

Etes-vous sûr qu'aucun de ces caractères ne se trouve dans vos autres chaînes? (Comme 'product.ProdGroup'). Avez-vous essayé de les changer tous à la même chose que 'product.ProdName'? – Don