Html “什么是最佳价值?”;单元分离器“;在XML中?

Html “什么是最佳价值?”;单元分离器“;在XML中?,html,xml,database,entity,Html,Xml,Database,Entity,我在数据库中使用了单位分隔符(US/0x1f)。当我导出到XML 1.0文件时,它不被接受,并将属性保留为空值 我在数据库中有如下数据: “选项1=10;选项2=20;选项3=aaa[US]bbb[US]ccc;” 我假设导出为XML 1.0文件,如下所示: 但是,XML1.0不接受[US]。有什么建议吗 我可以将“\37”(10月37日,十六进制1f)替换为类似“XXX”、“$”、“(0x1f)”的内容。。。在写入XML之前 我可以在从XML导入并写入数据库时替换它。但是,如果我将其替换为“

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

我在数据库中有如下数据:

“选项1=10;选项2=20;选项3=aaa[US]bbb[US]ccc;”

我假设导出为XML 1.0文件,如下所示:

但是,XML1.0不接受[US]。有什么建议吗

我可以将“\37”(10月37日,十六进制1f)替换为类似“XXX”、“$”、“(0x1f)”的内容。。。在写入XML之前

我可以在从XML导入并写入数据库时替换它。但是,如果我将其替换为“ F;”,这是单元分隔符的HTML实体,那么我最终会得到“&;#x1 F;”,这绝对不是我想要的

如果手动将XML文件修改为“&#x 1 F;”,则无法使用MSXML加载该文件,并给出错误“无效Unicode字符”

有什么建议吗

多谢各位


摘要:

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

对于XML文件生成,它的行为类似于“编译”阶段。例如,转换“此网站

提出以下建议之一:

HTML实体(十进制)
&31;

HTML实体(十六进制)
;

U+001F单元分隔符没有HTML实体。此外,HTML实体在处理通用XML时是不相关的

字符引用将是HTML和XML中的
;
;
,但HTML或XML中不允许使用字符。对于XML 1.0,这似乎是关于它的,请参阅第节,其中的标准定义是以下产品(相关评论具有误导性,且评论不规范):

要得出的结论取决于文本中单位分隔符的含义和用途。它没有一般定义的含义;应用程序可以为它指定一个含义并相应地处理它


通常,单元分隔符用于分隔某种类型的单元,因此自然的方法是处理传入的数据,以便在转换为XML格式时,数据具有由标记表示的单元,而不是此类分隔符如果是单元分隔符,您将生成类似于
aaabbbccc

的内容。这就是我想要的。我已经在各种XML处理器上尝试过,但所有处理器似乎都拒绝将
;
作为无效字符。谢谢Jukka。我在数据库中有这样的数据:“option1=10;option2=20;option3=aaa[US]bbb[US]ccc;“我假设像这样导出到XML 1.0文件:,但是,[US]不被XML 1.0接受。有什么建议吗?Hi Jukka,你能更详细地解释一下“但字符在HTML或XML中是不允许的”吗?如果我通过输入“&#x 1 F;”手动修改XML文件,我确实经历过,MSXML无法加载XML文件,出现错误“Unicode字符无效”。这就是您的意思吗?由于生产不允许使用U+001F来处理字符,因此它的存在违反了良好的格式,因此XML 1.0规则中存在一个致命错误:符合要求的XML处理器必须报告错误,并且不能恢复正常处理。因此MSXML执行它所需的操作。在不了解更多数据及其预期用途的情况下,很难推荐任何特定的转换。但是显示的片段可能最好映射到XML,如
1020aaabbcc
。或者为了更简单的文档结构,尽管标记更详细,
1020aaabbcc
MSXML仅限于XML 1.0,这可能是因为XML通常的含义是XML 1.0;XML 1.1没有获得太多使用或支持。关于用另一个字符替换U+001F,我想您需要找到一个在XML 1.0中有效且不能出现在实际数据中的字符。也许U+00B6 PILCROW符号“¨”在实践中足够安全,并且在阅读XML源代码时很容易区分。
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_".
Char       ::=      #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] |
                            [#x10000-#x10FFFF]