如何编辑utf-16xml文件,如果它在主节点的末尾有字符串行

本文关键字:节点 字符串 如果 何编辑 编辑 文件 utf-16xml | 更新日期: 2023-09-27 18:00:06

我有utf-16编码类型的特殊XML文件。这个文件用来存储数据,我需要使用C#窗体应用程序编辑它

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

问题是:它不是普通的XML文件因为在文件的最后,我也有一行字符串,这会导致错误

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

当我尝试将其加载为xml文件时

我试图临时替换最后一行,并在更改内部文本后将其取回,这很有效。但我丢失了声明行,当我在文件末尾有文本时,我没有找到重写它的方法_
所以我需要更改(Serie)和(No)节点的InnerText但我不想丢失声明行或文件

如何编辑utf-16xml文件,如果它在主节点的末尾有字符串行

末尾的字符串文本

试试这段代码:

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();

希望这能帮助

XDocument.Save()应保留XML声明行(如果声明最初存在)。我还检查了您的XML和按预期保存的声明行:

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");

因此,您可以实现临时替换最后一行的想法,并在更改内部文本后将其恢复。

Fyi,XDocument.ToString()方法不写XML声明行,但.Save()方法写。与此相关的问题:如何打印<?xml版本=";1.0〃>使用XDocument

请允许我回答问题当我使用doc。加载(文件路径);它总是给出干扰最后一行的错误原因和C#使用UTF-8作为默认值来处理xml文件。但在这个问题上,它是UTF-16所以我找到了一个很短的方法&用字符串替换内部文本,因为我想要

 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);

与此[博客]相关的问题:如何将此字符串保存到XML文件中?"它与答案有关,而不是与问题有关"