.net - 在 .NET 中过滤非法 XML 字符

标签 .net sql xml

我在 MS SQL 2005 中有一个 XML 存储过程,我使用 SqlCommand.ExecuteXmlReader 获取 XmlReader,然后解析数据并形成 XML 文档。问题是 SQL 中的数据包含一些二进制字符,这些字符在 UTF-8 XML 文档中是非法的,因此会抛出异常。

有没有其他人处理过这个问题?我考虑过过滤输入到数据库中的数据,但我必须在任何地方都进行过滤,并且需要检查每个字符。

还有什么建议吗?

编辑: 数据通常存储在各种长度的 varchar 列中。数据实际上是用户在 Web 表单(ASP .NET 应用程序)上输入的。所以有时他们会从 MS Word 或其他软件中复制粘贴,然后将这些奇怪的二进制字符放入。

最佳答案

我已经看到 DotNet SqlClient 从数据库中的 nvarchar 列“打乱”数据,我们的理论认为它与“代理代码点”有关,请参阅:

http://www.siao2.com/2005/07/27/444101.aspx

http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=rzaaxsurrogate.htm

http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/c0004816.htm

SqlClient 似乎“解释”了一些字节,这意味着我们的 Xml 格式不再正确,转换为 nvarchar(max) 似乎可以阻止这种情况(尽管这确实会对性能产生影响):

SELECT CONVERT(NVARCHAR(MAX), MyValue) FROM ...

请注意,您需要使用 NVARCHAR(MAX),NVARCHAR( N ) 不起作用。

我们还发现 OleDB 提供程序也能正常工作(尽管它比 SqlClient 慢)。

关于.net - 在 .NET 中过滤非法 XML 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/802029/

相关文章:

.net - 如何使用部分类扩展 ADO.NET Entity Framework 对象?

c# - 使用.net c# 将图像从 jpg 转换为特定的 TIFF 格式

C# 签名代码 : only 1 apps? 生命周期?

php - 如何用 PDO 替换 MySQL 函数?

javascript - JavaScript 中的 XML 按标签排序

c# - 如何通过控制台以隐藏模式运行复制命令?

sql - 根据同一表中的主记录插入缺失记录

sql - 如何在 Presto SQL 中使用 NOT LIKE 和 % 从搜索中排除项目?

java - 验证 XML - 删除无效数据

java - 在 TextMergeViewer Eclipse 上应用 XML 着色样式