1

我在数据库中存储了“单位分隔符”0x1F。

我想要的只是使用 MSXML6.dll 将单位分隔符导出为 XML 1.0 格式。

以下是我的痛点:

  1. 将 0x1F 直接写入 XML 文件,错误消息,属性以空字符串结尾。

  2. 替换为 HTML Entity "&#x 1 F;",然后写入 XML 文件,结果是:"&#x 1 F;",令人失望。

  3. 如果我手动更改 XML 文件以替换“& amp ; # x 1 F ;” 到“& # x 1 F ;”,XML 解析器失败,出现异常“无效的 Unicode 字符”。

问题: 那么,如果我不能使用 XML 1.1,将“单位分隔符”写入 XML 文件并可以导入的最佳解决方案是什么?

注意:一种可能的解决方案是将“单位分隔符”替换为一些奇怪的字符串,例如“ $ ”。但这真的是个好名字吗?如果我使用“0x1F”或“#x1F”或“#x1F;”,你有什么看法?而不是“”?哪个更好或更好的候选人?


概括:

打个比方:让我们想想编译器是如何工作的,有两个阶段:“预编译”和“编译”。

对于 XML 文件生成,它的作用类似于“编译”阶段。例如将“<”转换为“& lt;”

但是,XML 1.0 不支持单元分隔符,因此“编译”阶段不会将其转换为 HTML 实体“&#x 1 F;”

所以我们必须在“预编译”阶段寻求解决方案,这是我们自己的应用程序的责任。

写作时:

Option1: <unit>aaa</unit><unit>bbb</unit>
Option2: simply use "_x241F_" to replace "\37" in the string if "_x241F_" is not conflicting with any existing token in the string.

阅读时:

According to Option1: Load the elements, catenate to a single string with "\37" as separator.
According to Option2: simply use "\37" to replace "_x241F_".

我还发现 MSXML(即使是最高版本的 MSXML6.dll)也不会加载 XML 1.1 。

因此,如果不幸地使用 MSXML,我们必须在输入“编译”阶段之前编写自己的“预编译”代码来处理 Unicode 字符。

注意:我从这里借用了“_ x 2 4 1F _”的想法。感谢大家的帮助

4

1 回答 1

0

也许将内部 DTD 附加到 XML 文件可能对您有用?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [<!ENTITY 0x1F "&#x1F;">]>
<root>
  <Units>Unit1&0x1F;Unit2</Units>
</root>
于 2013-04-28T23:36:56.677 回答