如何在有效的XML文档中定义HTML实体引用?

时间:2011-06-28 15:20:58

标签: xml xhtml xml-dtd

我需要能够在XML文档中引用像•这样的命名HTML实体,而不是Unicode替代•。我可以控制XML文档的某些部分,例如定义DOCTYPE,但是在实际的XML中进行查找和替换不是一种选择。我可以通过包含XHTML过渡DOCTYPE来获取 &等元素,但我需要手动定义更多元素。我该怎么做?

- 编辑 -

感谢Jim的回答,这就是我最终的结果。这很棒,因为我可以使用XHTML过渡实体,还可以添加我自己的实体:

<!DOCTYPE
   html
   PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
   [
      <!ENTITY bull  "&#8226;">
      <!ENTITY ldquo "&#8220;">
      <!ENTITY rdquo "&#8221;">
      ... etc ...
   ]
>

2 个答案:

答案 0 :(得分:13)

如果您可以修改XML以包含内联DTD,则可以在那里定义实体:

<!DOCTYPE yourRootElement [
    <!ENTITY bull "&#8226;">
    ....
]>

答案 1 :(得分:3)

我不是cetain,但我认为XHTML DTD应该会给你很多实体(253):

http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML

同样在w3规范中,还提到了特殊字符等的附加DTD。 http://www.w3.org/TR/xhtml-modularization/dtd_module_defs.html#a_dtd_xhtml_character_entities

但是我找不到特殊字符DTD的实现示例。


按DevNull编辑

这是一个实体DTD模块的极其通用的示例实现。要实现,您只需要添加一个指向模块的参数实体。

<?xml version="1.0"?>
<!DOCTYPE test [
<!ELEMENT test (#PCDATA)>
<!ENTITY % xhtml-special SYSTEM "xhtml-special.ent">
%xhtml-special;
]>
<test>Here is a left double quote: &ldquo;</test>