2014-04-25 1 views
0

J'ai le fichier XML spécial avec le type de codage utf-16. ce fichier utilisé pour stocker des données et je dois modifier à l'aide de Windows C# forme d'applicationcomment éditer le fichier xml de utf-16 s'il a la ligne de chaîne après la fin du noeud principal

<?xml version="1.0" encoding="utf-16"?> 
<cProgram xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="b0eb0c7e-f4de-4bc7-9e62-7a086a8c2fn8" Version="16.01" xmlns="cProgram"> 
    <Serie>N </Serie> 
    <No>123456</No> 
    <type>101</type> 
    <Dataset4>larg data here 2 million char</Dataset4> 
</cProgram>123456FF896631N 4873821012013-06-14 

le problème est le suivant: il est un fichier XML ordinaire Car au très fin du fichier, j'ai une ligne de chaîne aussi, et cela donnerait cette erreur

Data at the root level is invalid. Line x, position x 

lorsque je tente de le charger comme fichier xml

J'ai essayé de temporaire remplacer la dernière ligne et récupérer après que je change le texte intérieur, et il fonctionne, mais je perdu la ligne de déclaration et je n'ai pas trouvé un moyen de rewr ite quand j'ai ce texte à la fin du fichier! _
donc j'ai besoin de changer le InnerText de (Serie) et (No) nœuds mais je ne veux pas perdre la ligne de déclaration ou le texte de la chaîne à la fin du fichier

Répondre

0

permettez-moi de répondre à ma question quand j'ai utilisé doc.Load (filepath); il donne toujours cause d'erreur de la dernière ligne dérangeante et C# utilise UTF-8 par défaut pour travailler avec les fichiers xml.Mais dans cette question, il est UTF-16 Donc, j'ai trouvé un moyen très court de le faire & remplacer innertext avec chaîne comme je veux

string text = File.ReadAllText(filepath); 
     text = text.Replace("<Serie>N", "<Serie>"+textBox1.Text); 
     text = text.Replace("<Nom>487382","<Nom>"+textBox2.Text); 
     //saving file with UTF-16 
     File.WriteAllText("new.xml", text , Encoding.Unicode); 

question liée à ce [blog]: How to save this string into XML file? « il est beaucoup plus liée réponse que d'être liées à la question »

0

essayer ce morceau de code:

string line = ""; 
string[] stringsperate = new string[] { "</cProgram>" }; 
using (StreamReader sr = new StreamReader("C://blah.xml")) 
{ 
    line = sr.ReadToEnd(); 
    Console.WriteLine(line); 
} 
string text = line.Split(stringsperate, StringSplitOptions.None)[0]; 
text += "</cProgram>"; 
XmlDocument xd = new XmlDocument(); 
xd.LoadXml(text); 
Console.Read(); 

Hope this helps

+0

A.Khatri: il est fonctionne pas .. peut-être parce qu'il est gros fichier (Caractère 2milion à l'intérieur de dataset4) et il ne dit pas comment changer le texte ineer! – user3570328

+0

avec le xml que vous avez fourni, cela fonctionne très bien. vous devez essayer d'éditer le texte interne car google est plein d'aide. –

+0

peut-être vous manquez me comprendre .. Je sais comment changer le texte interne, Mais avec ce fichier, je ne peux pas et ma question était de savoir comment puis-je le changer. il n'y a rien sur google à ce sujet, c'est cas particulier de la dernière ligne! – user3570328

0

XDocument.Save() devrait persister la ligne de déclaration XML si la déclaration existe au départ. J'ai aussi vérifié avec votre XML et la ligne de déclaration enregistrée comme prévu:

var xml = @"<?xml version=""1.0"" encoding=""utf-16""?> 
<cProgram xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" ID=""b0eb0c7e-f4de-4bc7-9e62-7a086a8c2fn8"" Version=""16.01"" xmlns=""cProgram""> 
    <Serie>N </Serie> 
    <No>123456</No> 
    <type>101</type> 
    <Dataset4>larg data here 2 million char</Dataset4> 
</cProgram>"; 
var doc = XDocument.Parse(xml); 
doc.Save("test.xml"); 

vous pouvez donc mettre en œuvre votre idée de remplacer temporairement la dernière ligne et le récupérer après avoir modifié le texte intérieur.

Fyi, XDocument La méthode .ToString() n'écrit pas de ligne de déclaration XML, mais la méthode .Save() le fait. Question relative à ceci: How to print <?xml version="1.0"?> using XDocument

+0

J'ai trouvé où est le problème .. il est sur l'encodage C# UTF-8 par défaut.le texte est UTF-16 et mon fichier xml est aussi UTF-16. merci pour votre aide et regardez ma nouvelle réponse – user3570328

Questions connexes