在 C# 控制台应用程序中,我正在读取特定文件夹中的 XML 文件。
我从每个文件中获取内容作为字符串,并希望使用实体框架将其写入 SQL Server 表。
该表有三列:第一列是自动递增的
ID
,第二列是 GUID,第三列是 XML
文件的内容。
XML 文件内容的列的类型为
XML
。
当我尝试使用 XML 文件的内容向该表写入一行时,出现以下异常:
XML解析:第1行,第38个字符,无法切换编码
XML 文件的编码为 UTF-8,但我想我需要 UTF-16。
如何以正确的方式对文件内容进行编码?
欢迎任何帮助。
这是 XML 文件的典型标头:
<?xml version="1.0" encoding="utf-8"?>
这是我将文件内容写入 SQL Server 的代码:
public void WriteXmlTestFileToDatabase(string xmlFileContent)
{
using (SqlServerDatabaseEntities db = new SqlServerDatabaseEntities())
{
var newEntry = new myTable();
newEntry.FileGuid = Guid.NewGuid().ToString();
newEntry.XmlDocument = xmlFileContent;
db.myTable.Add(newEntry);
db.Entry(newEntry).State = EntityState.Added;
db.SaveChanges(); // Here I'm getting the exception
}
}
经过测试,我确认确实存在这个问题,但是可以通过删除XML声明来解决。删除声明不会影响XML文件的有效性,并且该文档仍然可以被XML解析器正确解析和处理。
var filecontext=File.ReadAllText("C:\\Users\\TestUser\\Desktop\\1.xml");
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(filecontext);
if (xmldoc.FirstChild.NodeType == XmlNodeType.XmlDeclaration)
{
xmldoc.RemoveChild(xmldoc.FirstChild);
}
此代码读取 XML 文件,解析其内容,检查 XML 声明节点(例如 )是否存在,如果存在则将其删除。
FirstChild 属性用于访问 XML 文档的第一个节点。如果此节点是 XML 声明,则其 NodeType 将为 XmlNodeType.XmlDeclaration。