C# 为什么xmlreader可以';我不读xmlwriter写的东西?
我有世界上最简单的代码C# 为什么xmlreader可以';我不读xmlwriter写的东西?,c#,xml,xmlreader,C#,Xml,Xmlreader,我有世界上最简单的代码 using (XmlWriter writer = XmlWriter.Create(stringWriter)) { writer.WriteStartDocument(); writer.WriteStartElement("Board"); writer.WriteAttributeString("Rows", mRows.ToString()); writer.WriteAttributeString("Columns", mColumns.ToStrin
using (XmlWriter writer = XmlWriter.Create(stringWriter))
{
writer.WriteStartDocument();
writer.WriteStartElement("Board");
writer.WriteAttributeString("Rows", mRows.ToString());
writer.WriteAttributeString("Columns", mColumns.ToString());
writer.WriteEndElement();
writer.WriteEndDocument();
}
TextWriter writer1 = new StreamWriter(path);
writer1.Write(stringWriter.toString());
writer1.Close();
然后我将其写入一个txt文件,如下所示:
<?xml version="1.0" encoding="utf-16"?>
<Board Rows="30" Columns="50">
</Board>
它抛出了一个异常:
“没有Unicode字节顺序标记。无法切换到Unicode。”
我在谷歌上搜索了这个异常,找到了几个变通方法,但我不明白为什么我需要一个变通方法,我只想阅读我编写的xml。
有人能解释一下到底是什么问题吗?
我应该在xml中写些不同的东西吗
最简单的解决方案是什么?您可能没有写入unicode文件,而unicode文件或vanilla文件则没有这样做 而是使用或
FileStream
结合构造函数来指定unicode
样本:
var path = @"C:\Dev\sample.xml";
string xml;
var mRows = 30;
var mColumns = 50;
var options = new XmlWriterSettings { Indent = true };
using (var stringWriter = new StringWriter())
{
using (var writer = XmlWriter.Create(stringWriter, options))
{
writer.WriteStartDocument();
writer.WriteStartElement("Board");
writer.WriteAttributeString("Rows", mRows.ToString());
writer.WriteAttributeString("Columns", mColumns.ToString());
writer.WriteEndElement();
writer.WriteEndDocument();
}
xml = stringWriter.ToString();
}
if(File.Exists(path))
File.Delete(path);
using(var stream = File.OpenWrite(path))
using(var writer = new StreamWriter(stream, Encoding.Unicode))
{
writer.Write(xml);
}
Console.Write(xml);
using(var stream = File.OpenRead(path))
using(var reader = XmlReader.Create(stream))
{
reader.Read();
}
File.Delete(path);
在本例中,使用FileStream而不是StringWriter+写入文件,它将变得清晰。如何保存xml文件?我添加了我的写入方式。对为什么
StreamWriter
在备注部分没有字节顺序标记进行了说明。我不知道它为什么这样做,但它清楚地说明了为什么你会有你所看到的行为
var path = @"C:\Dev\sample.xml";
string xml;
var mRows = 30;
var mColumns = 50;
var options = new XmlWriterSettings { Indent = true };
using (var stringWriter = new StringWriter())
{
using (var writer = XmlWriter.Create(stringWriter, options))
{
writer.WriteStartDocument();
writer.WriteStartElement("Board");
writer.WriteAttributeString("Rows", mRows.ToString());
writer.WriteAttributeString("Columns", mColumns.ToString());
writer.WriteEndElement();
writer.WriteEndDocument();
}
xml = stringWriter.ToString();
}
if(File.Exists(path))
File.Delete(path);
using(var stream = File.OpenWrite(path))
using(var writer = new StreamWriter(stream, Encoding.Unicode))
{
writer.Write(xml);
}
Console.Write(xml);
using(var stream = File.OpenRead(path))
using(var reader = XmlReader.Create(stream))
{
reader.Read();
}
File.Delete(path);