【发布时间】:2017-08-02 08:01:35
【问题描述】:
我尝试在 XSLT 中使用 Xalan 而不是 Saxon 来生成随机 UUID
这是代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:uuid="xalan://java.util.UUID">
<xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="uid" select="uuid:randomUUID()"/>
<xsl:value-of select="$uid"/>
</xsl:template>
</xsl:stylesheet>
我使用 Xalan 而不是 Saxon 的原因是:它是免费的。 所以我需要购买 Saxon 以将其用于我的目的。
这个想法是当我尝试转换一个 XML 文件时,我想生成这个 UUID 并将其放入我想要的节点。
我正在使用的参考:
http://www.pure-xml.com/cblog/index.php?/archives/8-Generating-UUIDs-with-XSL-and-Java.html
执行的错误是:
XSL transformation failed
XTDE1420: Error in XPath 2.0 expression
Unknown function - Name and number of arguments do not match any function
signature in the static context - 'xalan://java.util.UUID:randomUUID'
【问题讨论】:
-
Xalan 根本不支持 XSLT 2.0,所以我不确定您的帖子为什么提到将 Xalan 与 XSLT 2.0 一起使用。并且错误消息看起来好像来自撒克逊人,所以不知何故,如果您打算使用 Xalan,那么我认为您还没有这样做。
-
那么在 XSLT 2.0 中替代 Xalan 和 Saxon 的解决方案可能是什么?
-
好吧,要使用该 Java 类来创建 UUID,我认为您不需要特定版本的 XSLT,您需要编写一个 Java 程序来调用该类,然后传入生成的值作为 XSLT 样式表的参数,无论您使用 XSLT 1.0 还是 2.0 处理器执行此操作似乎都无关紧要。如果您真的想直接从您的 XSLT 编写 Java 代码,那么您将不得不探索您的 XSLT 处理器对此的支持,对于 Saxon 9 HE,请参阅saxonica.com/html/documentation/extensibility/…,但它也需要编写 Java 代码。
-
是的,我已经用 Saxon HE 尝试过,但它不起作用,Java 说你需要 Saxon PE 或更高版本才能在 XSLT 中使用它(这不是免费的)。我正在寻找一个免费的首先是解决方案。
-
使用参数或集成扩展函数是“免费的”,您只需要用Java编写代码。