我有一个用PHP DOMDocument制作的动态生成的XML文档。我将此XML与XSL文件一起使用。它工作正常,直到我从数据库条目中获得日元货币符号(¥)。此符号转义为¥
HTML实体。这个实体打破了XSL / XML引擎:
警告:DOMDocument :: load()[domdocument.load]:实体'日元'没有 在%file.xml%,line:%1%in%file.php%on line%2%
中定义
当¥
实体不存在时,一切运作良好。
我有没有做过/包含/配置以获取此错误的内容?
答案 0 :(得分:3)
XML仅识别几个字符实体:<
,>
"
,&
,'
。除非您自己为实体添加定义,否则任何其他内容都将是解析错误:<!ENTITY yen "¥">
答案 1 :(得分:2)
使用¥
,您的XML将变为格式不正确的XML,因为XML没有预定义的¥
实体。 ¥
的有效转义版本为¥
。
答案 2 :(得分:1)
在使用XML时,默认情况下定义的唯一实体是&
,<
和>
。需要在DTD中定义任何其他实体。
XSL未在其doctype中定义任何其他实体。即使您要转换为(x)HTML,也没有定义其他实体,因为您的主要doctype适用于XSL。
您可以添加大量声明来在DTD中定义它们,但这意味着使用自定义DTD,这不是理想的,并且还需要维护很多工作。
坦率地说,最简单的解决方案就是使用数字实体代码。这很痛苦,但它适用于任何XML方言,而不需要对DTD进行任何黑客攻击。