gpt4 book ai didi

xml - Saxon 找不到函数 : current-group

转载 作者:数据小太阳 更新时间:2023-10-29 02:29:52 25 4
gpt4 key购买 nike

我正在尝试将 Saxon 与 XSLT 样式表结合使用,并使用 XSLT2 规范 ( http://www.w3.org/TR/xslt20/#xsl-for-each-group ) 中的代码示例

<table xsl:version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<tr>
<th>Position</th>
<th>Country</th>
<th>City List</th>
<th>Population</th>
</tr>
<xsl:for-each-group select="cities/city" group-by="@country">
<tr>
<td><xsl:value-of select="position()"/></td>
<td><xsl:value-of select="@country"/></td>
<td>
<xsl:value-of select="current-group()/@name" separator=", "/>
</td>
<td><xsl:value-of select="sum(current-group()/@pop)"/></td>
</tr>
</xsl:for-each-group>
</table>

我在我的 pom.xml 中使用以下内容

<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
<version>9.6.0-3</version>
</dependency>

运行它的代码是:

    @Test
public void testSaxonXslt2GroupTest1() throws Exception {

File xml_file = Fixtures.XSLT2_TEST1_XML;
File xsl_file = Fixtures.XSLT2_TEST1_XSL;


TransformerFactory tfactory = net.sf.saxon.TransformerFactoryImpl.newInstance();
Transformer transformer = tfactory.newTransformer(new StreamSource(xsl_file));
File saxonDir = new File("target/saxon/");
saxonDir.mkdirs();
try {
transformer.transform(new StreamSource(xml_file),
new StreamResult(new FileOutputStream(new File(saxonDir, "test1.xml"))));
} catch (Throwable t) {
t.printStackTrace();
}
}

这会在输出控制台上抛出一个错误

SystemId Unknown; Line #13; Column #70; Could not find function: current-group
SystemId Unknown; Line #13; Column #70; function token not found.
(Location of error unknown)java.lang.NullPointerException

我正在使用的 Saxon 版本中是否缺少此功能,还是我做错了什么?

最佳答案

JAXP 再次来袭!问题是,您实际上并没有在运行 Saxon。

当你这样做时:

factory = net.sf.saxon.TransformerFactoryImpl.newInstance();

它真的看起来好像在调用 Saxon 方法,不是吗?但是在 Java 中,不能以这种方式重写静态方法(如果可以的话我会……)。您只需在基类上调用 newInstance() 方法,它会在类路径中搜索它找到的第一个 XSLT 处理器。如果您想显式调用 Saxon,最好通过以下方式避免类路径搜索

factory = new net.sf.saxon.TransformerFactoryImpl();

关于xml - Saxon 找不到函数 : current-group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27621061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com