XML 输出器添加额外的非 ascii 字符
XML Outputter adds extra non ascii character
我正在使用以下 XML 输出器根据 CSV 数据写入 xml 文件。
public override void Output(IRow input, IUnstructuredWriter output)
{
IColumn badColumn = input.Schema.FirstOrDefault(col => col.Type != typeof(string));
if (badColumn != null)
{
throw new ArgumentException(string.Format("Column '{0}' must be of type 'string', not '{1}'", badColumn.Name, badColumn.Type.Name));
}
using (var writer = XmlWriter.Create(output.BaseStream, this.fragmentSettings))
{
writer.WriteStartElement(this.rowPath);
foreach (IColumn col in input.Schema)
{
var value = input.Get<string>(col.Name);
if (value != null)
{
// Skip null values in order to distinguish them from empty strings
writer.WriteElementString(this.columnPaths[col.Name] ?? col.Name, value);
}
}
}
}
它工作得很好,作业完全完成,没有任何错误,但是,在预览和下载文件时,还有另一个额外的字符导致无法读取 xml 文件。我尝试过使用片段级别和自动作为一致性级别。
我得到的示例输出是
两个标签之间的额外字符导致读取文件时出现问题。
我已经通过明确提供编码设置以及使用以下代码关闭标签解决了这个问题
private XmlWriterSettings fragmentSettings = new XmlWriterSettings
{
ConformanceLevel = ConformanceLevel.Auto,
Encoding = Encoding.UTF8
};
public override void Output(IRow input, IUnstructuredWriter output)
{
IColumn badColumn = input.Schema.FirstOrDefault(col => col.Type != typeof(string));
if (badColumn != null)
{
throw new ArgumentException(string.Format("Column '{0}' must be of type 'string', not '{1}'", badColumn.Name, badColumn.Type.Name));
}
using (var writer = XmlWriter.Create(output.BaseStream, this.fragmentSettings))
{
writer.WriteStartElement(this.rowPath);
foreach (IColumn col in input.Schema)
{
var value = input.Get<string>(col.Name);
if (value != null)
{
// Skip null values in order to distinguish them from empty strings
writer.WriteElementString(this.columnPaths[col.Name] ?? col.Name, value);
}
}
writer.WriteEndElement(); //explicit closing tag for stream
}
}
这会输出一个格式正确的 XML,可以用任何 xml reader.
轻松阅读
我正在使用以下 XML 输出器根据 CSV 数据写入 xml 文件。
public override void Output(IRow input, IUnstructuredWriter output)
{
IColumn badColumn = input.Schema.FirstOrDefault(col => col.Type != typeof(string));
if (badColumn != null)
{
throw new ArgumentException(string.Format("Column '{0}' must be of type 'string', not '{1}'", badColumn.Name, badColumn.Type.Name));
}
using (var writer = XmlWriter.Create(output.BaseStream, this.fragmentSettings))
{
writer.WriteStartElement(this.rowPath);
foreach (IColumn col in input.Schema)
{
var value = input.Get<string>(col.Name);
if (value != null)
{
// Skip null values in order to distinguish them from empty strings
writer.WriteElementString(this.columnPaths[col.Name] ?? col.Name, value);
}
}
}
}
它工作得很好,作业完全完成,没有任何错误,但是,在预览和下载文件时,还有另一个额外的字符导致无法读取 xml 文件。我尝试过使用片段级别和自动作为一致性级别。
我得到的示例输出是
两个标签之间的额外字符导致读取文件时出现问题。
我已经通过明确提供编码设置以及使用以下代码关闭标签解决了这个问题
private XmlWriterSettings fragmentSettings = new XmlWriterSettings
{
ConformanceLevel = ConformanceLevel.Auto,
Encoding = Encoding.UTF8
};
public override void Output(IRow input, IUnstructuredWriter output)
{
IColumn badColumn = input.Schema.FirstOrDefault(col => col.Type != typeof(string));
if (badColumn != null)
{
throw new ArgumentException(string.Format("Column '{0}' must be of type 'string', not '{1}'", badColumn.Name, badColumn.Type.Name));
}
using (var writer = XmlWriter.Create(output.BaseStream, this.fragmentSettings))
{
writer.WriteStartElement(this.rowPath);
foreach (IColumn col in input.Schema)
{
var value = input.Get<string>(col.Name);
if (value != null)
{
// Skip null values in order to distinguish them from empty strings
writer.WriteElementString(this.columnPaths[col.Name] ?? col.Name, value);
}
}
writer.WriteEndElement(); //explicit closing tag for stream
}
}
这会输出一个格式正确的 XML,可以用任何 xml reader.
轻松阅读