繁体   English   中英

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

[英]Is it normal that (some) HTML entities are breaking the XSL engine?

我有一个用 PHP DOMDocument制作的动态生成的 XML 文档。 我将此 XML 与 XSL 文件一起使用。 在我从数据库条目中获得日元货币符号 (¥) 之前,它运行良好。 这个符号被转义到¥ HTML 实体。 这个实体正在破坏 XSL/XML 引擎:

警告:DOMDocument::load() [domdocument.load]:实体 'yen' 未在 %file.xml% 中定义,行:%1% in %file.php% on line %2%

¥ 实体不存在一切正常。

有什么我没有做/包含/配置来得到这个错误吗?

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

&yen; 你的 XML 变得不是格式良好的 XML,因为 XML 没有预定义的&yen; 实体。 ¥的有效转义版本是&#xA5; .

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

XSL 没有在其文档类型中定义任何其他实体。 即使您正在转换为 (x)HTML,您也没有定义其他实体,因为您的主要文档类型是用于 XSL。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM