如何将单元分隔符写入XML 1.0?

时间:2013-04-28 23:29:51

标签: xml msxml separator

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

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

以下是我的痛苦:

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

  2. 替换为HTML实体“&#x 1 F;”,然后写入XML文件,结果是:“& amp;#x 1 F;”,这是令人失望的。

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

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

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


    要点:

    让我们做一个类比:让我们考虑编译器的工作原理,有两个阶段:“预编译”和“编译”。

    对于XML文件生成,它的行为类似于“编译”阶段。例如。转换“<” “& l t;”

    但是,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字符,然后再进入“编译”阶段。

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

1 个答案:

答案 0 :(得分:0)

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [<!ENTITY 0x1F "&#x1F;">]>
<root>
  <Units>Unit1&0x1F;Unit2</Units>
</root>