如何在没有DOCTYPE,CDATA或转义的XML中嵌入XHTML?

时间:2012-04-10 20:11:40

标签: xml xhtml schema doctype dtd

在没有DOCTYPE DTD声明的情况下,有没有办法将XHTML实体引用嵌入到XML文本中? DOCTYPE行导致它所针对的Java服务器出现问题。

逃离&amp ;;序列是不可接受的,也不是嵌入CDATA。参考文献需要进行验证。

是否可以从架构定义而不是XML数据文件中引用DTD。

更广泛地说,在XML中嵌入XHTML(或至少是实体引用)并对其进行验证的常见做法是什么?

一个可能的解决方案是将整个XHTML 1.0 DTD转换为模式,但这听起来不是最好的主意。

2 个答案:

答案 0 :(得分:3)

您是否尝试过没有PUBLIC或SYSTEM标识符的DOCTYPE?

您可以将ENTITY声明直接添加到内部子集:

<!DOCTYPE foo [
<!ENTITY nbsp   "&#160;">
<!ENTITY copy   "&#169;">
<!ENTITY laquo  "&#171;">
<!ENTITY reg    "&#174;">
<!ENTITY deg    "&#176;">
<!ENTITY plusmn "&#177;">
<!ENTITY sup2   "&#178;">
<!ENTITY sup3   "&#179;">
<!ENTITY frac14 "&#188;">
<!ENTITY frac12 "&#189;">
<!ENTITY frac34 "&#190;">
]>
<foo/>

或者您可以使用参数实体指向具有ENTITY声明的外部文件/文件:

<!DOCTYPE foo [
<!ENTITY % ents SYSTEM "xhtml-lat1.ent">
%ents;
]>
<foo/>

答案 1 :(得分:2)

如果您的实体引用不是5个预定义的实体引用,并且没有doctype,则XML格式不正确。

如果使用数字字符引用而不是命名实体引用,则可以大大简化操作,因此请使用

&#160;代替&nbsp;

通过修改原始生成(如果您控制它),或者仅通过使用任何xml解析器或使用perl或等效的简单文本替换来扩展实体。您可以在此处获取以dtd或json或其他格式设置的html(5)实体的完整列表http://www.w3.org/2003/entities/2007/