【问题标题】:XMLDocument.Load(), hexadecimal value 0x17, is an invalid characterXMLDocument.Load(),十六进制值 0x17,是无效字符
【发布时间】:2013-07-30 04:50:51
【问题描述】:

使用 xmlDocument.Load() 方法加载 xml 文件时出现以下错误:

我收到此错误是因为我的 XML 中有一些无效字符“ETB”。我怎样才能解决这个问题?该字符是二进制编码图像数据的一部分。

<prompt>
   <![CDATA[<FlowDocument xmlns="http://schemas.microsoft.com/something"><Paragraph xmlns="http://schemas.microsoft.com/something"><InlineUIContainer BaselineAlignment="Center">
        <Image Stretch="None" Width="1024" Height="282"><Image.Source><BitmapImage><base64Binary>(Base 64 encoded data containing 'ETB' Text)
   </base64Binary></BitmapImage></Image.Source></Image></InlineUIContainer></Paragraph></FlowDocument>]]>
</prompt>

Base 64 二进制数据是这样的:

iVBORw0KGgoAAAANSUhEUgAABAAAAAEaCAIAAAAACrKOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAOvwAADr8BOAVTJAAAaz9JREFUeF7tnQVgE03Tx8ODu7u7u7v7i7trcS0Ul+Luxd2Ke7FSrEix4oWixZ3iFErlnd1NLqlQ0sbukv+938eTnOzO/HavmdmdnY0WHByswgECIAACIAACIAACIAACIGAjBMgBwAECIAACIAACIAACIAACIGAjBFQ2oifUBAEQAAEQAAEQAAEQAAEQYOE/oAACIAACIAACIAACIAACIGA7BOAA2E5bQ1MQAAEQAAEQAAEQAAEQwAwA+gAIgAAIgAAIgAAIgAAI2BIBzADYUmtDVxAAARAAARAAARAAAZsnAAfA5rsAAIAACIAACIAACIAACNgSAeU5AEFRaZ4oPfSPikKVaYoqoqIqnpEBAXQGyzZCYJjqw56xrIS...

此数据中有一个“ETB”字符。

【问题讨论】:

  • 介于什么之间?真的不清楚无效字符来自哪里......
  • @JonSkeet 请检查this 文件以获取完整的二进制数据
  • 这根本不是有效的 base64 数据。除了那个有问题的字符,它还包含非 ASCII 字符。我们仍然不知道数据来自哪里,但它不是有效的 base64。

标签: c# xmldocument


【解决方案1】:

这个字符是二进制编码图像数据的一部分。

那么它不应该在 XML 文档中。 XML 文档是 文本 - 通常如果您想包含任意二进制数据,您可以对其进行 base64 编码。

这实际上不是 C# 问题或 .NET 问题 - 只是您的 XML 文档无效。

【讨论】:

  • 我的 XML 有 base64 格式的图像。节点就像&lt;![CDATA[&lt;FlowDocument xmlns="http://schemas.microsoft.com/something"&gt;&lt;Paragraph xmlns="http://schemas.microsoft.com/something"&gt;&lt;InlineUIContainer BaselineAlignment="Center"&gt;&lt;Image Stretch="None" Width="1024" Height="282"&gt;&lt;Image.Source&gt;&lt;BitmapImage&gt;&lt;base64Binary&gt;
  • 我的 xml 文档有 base64 编码数据,但我仍然得到那个 'ETB' 字符。有什么方法可以在不接触 xml 的情况下使用 C# 代码进行修复?
  • @Jaguar:不,这是无效的 XML。该字符确实不应该出现在 base64 编码的数据中。你确定这就是问题所在吗?我建议您在十六进制编辑器中查看文档并尝试找到该字节。
  • 是的,我确定错误与该字符有关。编码数据在CDATA 内。我认为 xmlDoc.load() 会忽略 CDATA 中的所有内容?
  • @Jaguar:不,它仍然需要是有效的字符数据。我确定错误也与该角色有关-但我不相信您认为它在哪里。您应该编辑您的问题以准确显示它在文档中的位置。
猜你喜欢
  • 2012-06-17
  • 2016-11-14
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多