Java中使用XSLT将XML转HTML时遭遇实体未声明解析错误
解决XSLT中é、€实体未声明的报错问题
嘿,这个问题我之前也碰到过!本质是XML默认只支持少数预定义实体(像<、>、&这些),像é、€这种属于HTML专属的命名实体,XML解析器本身是不认识的,所以才会抛出“实体已被引用但未声明”的错误。给你几个实用的解决办法:
直接使用Unicode字符代替命名实体
如果你XSLT文件的编码是UTF-8(这也是XML的推荐编码),直接把é换成é,€换成€就行,XML解析器能直接识别这些Unicode字符,不需要额外声明。修改后的XSLT开头大概是这样:<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 你的模板内容 --> </xsl:stylesheet>在XSLT中声明需要的实体
如果你一定要用命名实体,可以在XSLT的开头添加DOCTYPE声明,手动定义这些实体。示例如下:<?xml version="1.0"?> <!DOCTYPE xsl:stylesheet [ <!ENTITY eacute "é"> <!ENTITY euro "€"> ]> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 你的模板内容 --> </xsl:stylesheet>这里用数字实体(
é是é的十进制Unicode码,€是€的十进制Unicode码)来定义命名实体,数字实体是XML内置支持的,不会有未声明的问题。替换成数字实体
直接把所有的é换成é,€换成€,这样不需要任何额外声明,XML解析器能直接识别这些数字形式的实体引用,这也是最稳妥的办法之一。
内容的提问来源于stack exchange,提问作者Karthikeyan
相关产品推荐
相关产品推荐

