Search code examples
c#xmldeclarationutf-16innertext

how to edit utf-16 xml file if it have string line after the end of the main Node


I have Special XML file with utf-16 encoding type. this file used to store data and I need to Edit it Using C# windows forms Application

<?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

the problem is: it is not ordinary XML file Because at the very End of the file I have a string line too, and that would give this error

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

when I try to load it as xml file

I tried to temporary replace the last line and get it back after I change the inner text, and it works But I lost the declaration Line and I didn't find a way to rewrite it when I have that text at the end of the file !_
so I need to change the InnerText of (Serie) and (No) nodes but I don't Want to lose the declaration Line or the string text at the end of the file


Solution

  • allow me to answer my question when I used doc.Load(filepath); it always give Error cause of the disturbing last Line and C# use UTF-8 as defaults to work with xml files.But in this question it is UTF-16 So I found a very short way to do this & replace innertext with string as I want

     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 related to this [blog]: How to save this string into XML file? "it is much more answer related than being Question related"