我在数据库中使用了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 _”的想法。
感谢大家的帮助
答案 0 :(得分:2)
本网站
http://www.fileformat.info/info/unicode/char/1f/index.htm
建议以下之一:
HTML实体(十进制)
HTML实体(十六进制)
答案 1 :(得分:2)
U + 001F UNIT SEPARATOR没有HTML 实体。此外,在处理通用XML时,HTML实体将无关紧要。
字符引用将是
和
,采用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>
的东西。