我在数据库中使用了单位分隔符(US/0x1f)。当我导出到 XML 1.0 文件时,它不被接受并将属性保留为空值。
我在数据库中有这样的数据:
“选项1=10;选项2=20;选项3=aaa[美国]bbb[美国]ccc;”
我假设像这样导出到 XML 1.0 文件:
<elementname, attr1="option1=10;option2=20;option3=aaa[US]bbb[US]ccc;"/>
但是,[US] 不被 XML 1.0 接受。有什么建议么?
在写入 XML 之前,我可以将 '\37' (oct 37, hex 1f) 替换为 "XXX", "$", "(0x1f)"...
从 XML 导入并写入数据库时,我可以替换它。但是,如果我将它替换为“& # x 1 F ;”,它是用于单元分隔符的 HTML 实体,我最终会得到“& amp ; # x 1 F ;”,这绝对不是我想要的。
如果我手动将 XML 文件修改为“ x 1 F;”,我无法使用 MSXML 加载它,并给出错误“无效的 Unicode 字符”。
有什么建议么?
谢谢
概括:
打个比方:让我们想想编译器是如何工作的,有两个阶段:“预编译”和“编译”。
对于 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 1 F _”的想法。
感谢大家的帮助