【发布时间】:2019-02-26 15:08:09
【问题描述】:
我在使用 xslt:transform() 和 BaseX 转换包含实体的 xml 节点时遇到了一些麻烦:
let $xsl := doc('xsl/commun.xsl')
return
xslt:transform(<node>ééé</node>, $xsl)
给了
[FODC0002] "" (Line 1): L'entité "eacute" était référencée, mais pas déclarée.
我创建了带有/不带有 intparse 和/或 DTD 选项的数据库,没有任何更改 (options basex)。
xslt:processor() 和 xslt:version 表明我正在使用 java 1.0 作为处理器。
这是我的 xslt 的声明:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:tei="http://www.tei-c.org/ns/1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html" encoding="UTF-8" omit-xml-declaration="no" exclude-result-prefixes="#all"/>xslt:transform
<xsl:template match="/"/>
我不知道我做错了什么...我应该在 XSL 文件中声明我想使用的任何实体吗?
【问题讨论】:
-
那么在您发布的代码中,您在哪里使用了任何“实体”?
<node>ééé</node>没有。<node>&eacute;</node>将具有对名为eacute的未声明实体的实体引用。要将其解析为 XML,您需要有一个 DTD 根据需要声明实体或使用 BaseX 的内部解析器解析它,我认为它具有支持对已知 HTML 实体(如eacute)的引用的选项。 -
感谢您澄清这一点!我误解了错误消息所说的内容。
-
xslt:transform-text()也可以解决这个问题,以防您不需要将结果作为节点