【问题标题】:how to embed XHTML in XML without DOCTYPE, CDATA or escapes?如何在没有 DOCTYPE、CDATA 或转义的 XML 中嵌入 XHTML?
【发布时间】:2012-11-15 01:25:11
【问题描述】:

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

转义 &;序列是不可接受的,嵌入在 CDATA 中也不可接受。需要验证引用。

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

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

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

【问题讨论】:

    标签: xml xhtml schema doctype dtd


    【解决方案1】:

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

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

    <!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/>
    

    【讨论】:

      【解决方案2】:

      如果您有 5 个预定义的实体引用以外的实体引用,并且没有文档类型,则 XML 格式不正确。

      如果你使用数字字符引用而不是命名实体引用,你会大大简化事情,所以使用

      &amp;#160; 而不是&amp;nbsp;

      可以通过修改原始生成(如果您控制它),或者只是使用任何 xml 解析器或使用 perl 或等效的简单文本替换来扩展实体。您可以在此处http://www.w3.org/2003/entities/2007/

      获取以 dtd 或 json 或其他格式设置的 html(5) 实体集的完整列表

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-08
        • 2018-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-10
        • 1970-01-01
        相关资源
        最近更新 更多