2011-02-25 3 views
0

j'ai un ensemble de données que je dois convertir en XML avec encoding = "UTF-8" specifiedin le fichier xmlconvertir au format XML (encoding = "UTF-8"),

SqlConnection con = new SqlConnection(dbconn); 
       con.Open(); 
       SqlDataAdapter cmd1 = new SqlDataAdapter("select * from employee", con); 
       DataSet ds = new DataSet(); 
       cmd1.Fill(ds); 

       string strFileName = @"E:\Dif.xml";   
       MemoryStream memStream = new MemoryStream(); 
       StreamWriter writer = new StreamWriter(memStream, Encoding.UTF8);    
       ds.WriteXml(writer, XmlWriteMode.WriteSchema); 

Je ne vois pas fichier xml été écrit, i WANTE dteh fichier xml à écrire dans ce format dans la rubrique

<?xml version="1.0" encoding="utf-8" ?> 

donc ce qui est Teh paramètre que je devrais faire tout ensemble de données de conversion en XML.

s'il vous plaît, aidez-moi, ima utilisant VS2003, .net Framework 1.1

grâce prince

+1

Essayez d'utiliser FileStream au lieu de MemoryStream. Votre code devrait ressembler à ceci: FileStream = new FileStream (strFileName, FileMode.CreateNew, FileAccess.Write, FileShare.None); StreamWriter écrivain = nouveau StreamWriter (fs, Encoding.UTF8); ds.WriteXML (écrivain, XMLWriteMode.WriteSchema); –

+0

+1 @Verrigo - tout ce qui est écrit isn ' t étant écrit dans le fichier pour le moment - il est écrit en mémoire Pourquoi ne pas poster comme une réponse potentielle –

Répondre

0

Avez-vous essayé XmlWriteMode.IgnoreSchema?

Taken de http://msdn.microsoft.com/en-us/library/system.data.xmlwritemode.aspx pour XmlWriteMode.WriteSchema:

écrit le contenu actuel du DataSet sous forme de données XML avec la structure relationnelle comme schéma XSD en ligne . Si le DataSet a seulement un schéma sans données, seul le schéma en ligne est écrit. Si le DataSet a n'a pas de schéma en cours, rien n'est écrit .

0

Vous écrivez dans un flux de mémoire. Utilisez un FileStream si vous voulez une sortie sur le disque.

Cordialement, Morten

+0

merci pour la solution, maintenant le fichier a été écrit sur le disque, mais toujours n'est pas écrit dans le fichier xml – happysmile

2

Selon la suggestion d'Alex, voici mon commentaire comme une réponse: Essayez d'utiliser FileStream au lieu de MemoryStream: Votre code devrait ressembler à ceci:

FileStream fs =new FileStream(strFileName, FileMode.CreateNew, FileAccess.Write, FileShare.None); 
StreamWriter writer = new StreamWriter(fs, Encoding.UTF8); 
ds.WriteXML(writer, XMLWriteMode.WriteSchema); 

Mais aussi, s'il vous plaît jetez un oeil à son anwer aussi, peut-être la réponse est une combinaison de nos deux réponses.

2
XmlWriterSettings settings = new XmlWriterSettings(); 
settings.Encoding = Encoding.UTF8; 
using (XmlWriter xmlWriter = XmlWriter.Create(strFileName, settings)) 
{ 
    ds.WriteXml(xmlWriter); 
    xmlWriter.Close(); 
} 

Utilisez ce peut écrire xml avec encodage:

<?xml version="1.0" encoding="utf-8"?> 
+0

Meilleure réponse jusqu'à présent, j'ai créé une méthode d'extension pour cela. –

1

je réponse flying19880517s et converti à une méthode d'extension. Pour obtenir le même résultat que la méthode WriteXml originale j'ai ajouté Indent = true (sinon votre obtenir le xml sans nouvelles lignes/espaces

public static void WriteXml(this DataSet ds, string fileName, Encoding encoding) 
    { 
     using (var writer = XmlWriter.Create(fileName, 
      new XmlWriterSettings { Encoding = encoding, Indent = true, })) 
      ds.WriteXml(writer); 
    }