(某些)HTML实体破坏XSL引擎是否正常?

时间:2011-07-22 13:58:08

标签: php xml xslt domdocument html-entities

我有一个用PHP DOMDocument制作的动态生成的XML文档。我将此XML与XSL文件一起使用。它工作正常,直到我从数据库条目中获得日元货币符号(¥)。此符号转义为¥ HTML实体。这个实体打破了XSL / XML引擎:

  

警告:DOMDocument :: load()[domdocument.load]:实体'日元'没有   在%file.xml%,line:%1%in%file.php%on line%2%

中定义

¥实体不存在时,一切运作良好。

我有没有做过/包含/配置以获取此错误的内容?

3 个答案:

答案 0 :(得分:3)

XML仅识别几个字符实体:&lt;&gt; &quot;&amp;&apos;。除非您自己为实体添加定义,否则任何其他内容都将是解析错误:<!ENTITY yen "&#x00a5">

答案 1 :(得分:2)

使用&yen;,您的XML将变为格式不正确的XML,因为XML没有预定义的&yen;实体。 ¥的有效转义版本为&#xA5;

答案 2 :(得分:1)

在使用XML时,默认情况下定义的唯一实体是&amp;&lt;&gt;。需要在DTD中定义任何其他实体。

XSL未在其doctype中定义任何其他实体。即使您要转换为(x)HTML,也没有定义其他实体,因为您的主要doctype适用于XSL。

可以添加大量声明来在DTD中定义它们,但这意味着使用自定义DTD,这不是理想的,并且还需要维护很多工作。

坦率地说,最简单的解决方案就是使用数字实体代码。这很痛苦,但它适用于任何XML方言,而不需要对DTD进行任何黑客攻击。