使用C#的Xml编辑问题

| 我之前发布了一个有关通过C#编辑xml文档的问题 C#写入XML错误 但是我现在又遇到麻烦了。我使用的是当时可以使用的确切代码,但是又遇到了问题! 当我第一次单击该按钮时,它似乎可以工作,但是当我再次单击该按钮时,出现错误
Data at the root level is invalid. Line 83, position 10
当您由于某种原因而打开XML文档时,字符\“\”被添加到xml文档的开头,因此我得到
\"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\"
我不明白为什么,这真的让我发疯。我确定它以前已经在工作。 我的代码:
path = test.xml

using (FileStream READER = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                System.Xml.XmlDocument Temp = new System.Xml.XmlDocument();
                Temp.Load(READER);

                using (FileStream WRITER = new FileStream(path, FileMode.Open, FileAccess.Write, FileShare.ReadWrite))
                {
                    Temp.Save(WRITER);
                }
}
    
已邀请:
更新#2: 我按原样整理了您的样本,它对我来说效果很好。我用直接从代码创建的文件以及在Visual Studio中创建的xaml文件进行了测试。因此,您正在使用的文件似乎已损坏或存在编码问题。 据我所知,您无法对损坏的文件做任何事情,但是对于编码,您可以在使用StreamReader对象读取时指定它。您只需将所需的编码和阅读器流传递给StreamReader的构造函数。它还具有从字节顺序标记中检测编码的选项。
using (TextReader txtreader = new StreamReader(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), Encoding.GetEncoding(1251 /*desired codepage here*/)))
        {
            document.Load(txtreader);
        }
要么
using (TextReader txtreader = new StreamReader(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), true /*tries to detect the encoding*/))
        {
            document.Load(txtreader);
        }
当然,您应该使用相同的编码保存文件,否则下次运行加载代码时会遇到问题。 我还要附加一个代码,如果文件不存在,它将创建一个文件;如果文件已经存在,则对其进行修改。
class Program
{
    static readonly string path = @\"C:\\Users\\Dmitry\\Documents\\test_3.xml\";

    static void Main(string[] args)
    {
        for (int i = 0; i < 10; i++)
            test(path);
    }

    static void test(string path)
    {
        XmlDocument document = new XmlDocument();

        if (File.Exists(path))
        {
            using (Stream readStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                document.Load(readStream);
            }
        }
        else
        {                
            document.AppendChild(document.CreateXmlDeclaration(\"1.0\", \"UTF-8\", String.Empty));
            document.AppendChild(document.CreateElement(\"Test\"));
        }

        document.DocumentElement.AppendChild(document.CreateElement(\"Node\"));

        using (FileStream WRITER = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
        {
            document.Save(WRITER);
        }
    }
}
希望对您有帮助。     

要回复问题请先登录注册