XML中“单位分隔符”的最佳价值是什么?

时间:2013-04-26 05:38:42

标签: html xml database entity

我在数据库中使用了Unit Separator(US / 0x1f)。当我导出到XML 1.0文件时,它不被接受并保留属性为空值。

我在数据库中有这样的数据:

“选项1 = 10;选项2 = 20; 2选项= AAA [US] BBB [US] CCC;”

我假设要像这样导出到XML 1.0文件:

< elementname,attr1 =“option1 = 10; option2 = 20; option3 = aaa [US] bbb [US] ccc;”/>

但是,XML 1.0不接受[US]。有什么建议吗?

在写入XML之前,我可以用“XXX”,“$”,“(0x1f)”等替换'\ 37'(oct 37,hex 1f);

我可以在从XML导入并写入数据库时​​替换它。但是,如果我用“&#x 1 F;”(它是单位分隔符的HTML实体)替换它,我最终会得到“& amp;#x 1 F;”,这绝对不是我想要的。

如果我手动将XML文件修改为“&#x 1 F;”,我无法使用MSXML加载它,从而出现“无效的Unicode字符”错误。

有什么建议吗?

谢谢


要点:

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

对于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 1 F _”的想法。

感谢大家的帮助

2 个答案:

答案 0 :(得分:2)

本网站

http://www.fileformat.info/info/unicode/char/1f/index.htm

建议以下之一:

HTML实体(十进制)&#31;

HTML实体(十六进制)&#x1f;

答案 1 :(得分:2)

U + 001F UNIT SEPARATOR没有HTML 实体。此外,在处理通用XML时,HTML实体将无关紧要。

字符引用将是&#x1f;&#31;,采用HTML和XML格式,但HTML或XML中不允许使用该字符。对于XML 1.0,请参阅2.2 Characters部分,其中规范性定义是以下产品(相关评论具有误导性,评论是非规范性的):

Char       ::=      #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] |
                            [#x10000-#x10FFFF]

得出的结论取决于UNIT SEPARATOR在文中的含义和目的。它没有一般定义的含义;应用程序可以为其分配含义并相应地处理它。

通常UNIT SEPARATOR用于分离某种单位,因此自然的方法是处理传入的数据,以便在转换为XML格式时,数据不是这样的分隔符,而是具有用标记表示的单位。因此,对于像aaa [US] bbb [US] ccc这样的数据,其中[US]是UNIT SEPARATOR,你会产生类似<unit>aaa</unit><unit>bbb</unit><unit>ccc</unit>的东西。