【问题标题】:BaseX 9.1.2 : issues with entities on xslt:transformBaseX 9.1.2:xslt:transform 上的实体问题
【发布时间】: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 文件中声明我想使用的任何实体吗?

【问题讨论】:

  • 那么在您发布的代码中,您在哪里使用了任何“实体”? &lt;node&gt;ééé&lt;/node&gt; 没有。 &lt;node&gt;&amp;eacute;&lt;/node&gt; 将具有对名为 eacute 的未声明实体的实体引用。要将其解析为 XML,您需要有一个 DTD 根据需要声明实体或使用 BaseX 的内部解析器解析它,我认为它具有支持对已知 HTML 实体(如 eacute)的引用的选项。
  • 感谢您澄清这一点!我误解了错误消息所说的内容。
  • xslt:transform-text() 也可以解决这个问题,以防您不需要将结果作为节点

标签: xslt basex


【解决方案1】:

xslt:processor() 和 xslt:version 表明我正在使用 JAVA 1.0 作为处理器。

正如here 解释的那样,“如果在类路径中找到 Saxon XSLT 处理器(saxon9he.jar、saxon9pe.jar、saxon9ee.jar)的 9.x 版,则将启用 XSLT 3.0”

只需在 {Basex 文件夹}/lib/custom 中添加 saxon9he.jar 就可以了

希望有所帮助

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2016-03-12
    • 1970-01-01
    相关资源
    最近更新 更多