在Java XSLT扩展(适用于Saxon 9.1.0.8)中,我编写了一个功能,首先创建一个新对象并在其上调用实例方法(在XSLT 1.0样式表中)。以下是一个显示出相同问题的缩短版本:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="http://www.acrolinx.com" xmlns:saxon="http://saxon.sf.net/" version="1.1" extension-element-prefixes="saxon mt" xmlns:mt="http://www.jclark.com/xt/java/com.acrolinx.xsltextensions.MTExporter">
<xsl:variable name="exportMediaFile-available" select="function-available('mt:exportMediaFile')"/>
<xsl:variable name="mt" select="mt:new('http', 'localhost', 8031, 'uID', 'hDB', 'o/eT', 'Mt')"/>
<xsl:template match="/">
<xsl:message>exportMediaFile <xsl:value-of select="function-available('mt:exportMediaFile')"/></xsl:message>
<xsl:element name="mtf">
<xsl:apply-templates select="a:actif/a:data/a:entry"/>
</xsl:element>
<xsl:message>finalizeExport <xsl:value-of select="function-available('mt:finalizeExport')"/></xsl:message>
</xsl:template>
<xsl:template match="a:entry">
<xsl:element name="conceptGrp">
<xsl:apply-templates select="a:value"/>
</xsl:element>
</xsl:template>
<xsl:template match="a:value">
<xsl:if test="@field != ''">
<xsl:call-template name="descrip">
<xsl:with-param name="type" select="@field"/>
<xsl:with-param name="content" select="saxon:evaluate('node()')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="descrip">
<xsl:param name="type"/>
<xsl:param name="content"/>
<xsl:element name="descrip">
<xsl:attribute name="type">
<xsl:value-of select="$type"/>
</xsl:attribute>
<xsl:choose>
<xsl:when test="$type = 'imageURL' and $exportMediaFile-available">
<xsl:message>exportMediaFile <xsl:value-of select="function-available('mt:exportMediaFile')"/></xsl:message>
<xsl:value-of select="mt:exportMediaFile($mt, $content)"/>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="$content"/>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
问题:
>
我想用function-available()
保护调用,但它似乎返回不同的结果,这取决于在样式表中调用它的位置(=function-available()
而不是函数本身)。
结果是,使用saxon:evalue('node()')
会更改function-available
的行为:在没有(即作为node()
)的情况下,它会按预期工作,而使用saxon:evalue()
调用这是什么原因(既然这两者似乎与我并无关联)?
有没有办法用function-available()
保护构造函数调用?我不能在顶层使用xsl:if
。如果我使用
(其中jo只是一个普通Java对象的名称空间--为布局抱歉,但文本仍然不可见),那么如果扩展不可用,它可以工作。如果它可用,我会得到以下错误:
Cannot convert value class net.sf.saxon.value.TextFragmentValue of type document-node() to class com.acrolinx.xsltextensions.MTExporter
事实上,这已经发生在
<xsl:variable name="mt">
<xsl:value-of select="mt:new('http', 'localhost', 8031, 'uID', 'hDB', 'o/eT', 'Mt')"/>
</xsl:variable>
可能正在进行某种隐式强制转换,因此它可以与
select
一起工作,但不能与嵌套的xsl:value-of
一起工作。
我认为您需要展示一些特定的代码,这些代码给出了您无法解释的结果:如果代码没有完成您期望的工作,那么我们需要查看代码,以便理解您的期望为什么是错误的。理想情况下,提供完整的样式表:上下文(如版本号、名称空间声明等)可能很重要。
在XSLT2.0中,我建议在use-when属性中使用functhtml" target="_blank">ion-available(),以便调用相关函数的代码在编译时被屏蔽。在xsl:if中使用它的问题是,该函数调用对编译器仍然可见,并且将无法解析。XSLT1.0(以及向后兼容模式下的2.0)允许这样做,并表示只有在实际计算函数调用时才会出现错误。
我通常不希望看到这样的消息:“不能将document-node()类型的值类net.sf.saxon.value.TextFragmentValue转换为...”。它可能是一个Saxon bug,也可能只是一个相当糟糕的用户错误诊断。不管是哪种方式,我都想看看你所做的导致这条消息的细节。
我看到它包含了DejaVu Sans字体,但我不知道如何使用这个jar(我在网上什么也没有找到),也不知道这是否能以一种优雅、简单的方式解决我的跨平台软件。 你能告诉我更多关于这个罐子的事吗?
问题内容: 并且它的jQuery特定表弟一直以Javascript代码弹出。 这些构造如何工作,它们可以解决什么问题? 实例赞赏 问题答案: 随着JavaScript框架的日益普及,该标志已在许多不同的场合使用。因此,为减轻可能的冲突,可以使用以下构造: 具体来说,这是一个 匿名 函数声明,该声明 立即 通过将主要jQuery对象作为参数来执行。在该函数内部,您可以用来引用该对象,而不必担心其他框
Python中的字符串是不可变的,这意味着该值不能更改。但是,在以下示例中,当附加到字符串时,由于id保持不变,看起来原始字符串内存被修改了: 相反,在以下示例中,id更改:
我使用节点js来验证用户并发回JWT令牌。我是使用角6.0前端。我的问题是在客户端将这个令牌存储在哪里?如果在客户端使用localstorage,如何保护此令牌?
为什么gcc在上的末尾插入了,而我却要自己在上添加? 从:
问题内容: 经常出现在Python模块中。即使阅读了Python的文档,我也不明白它的用途以及使用时间/方式。 有人可以举例说明吗? 关于我收到的基本用法的一些答案似乎是正确的。 但是,我需要了解有关工作原理的另一件事: 对我来说,最令人困惑的概念是当前的python版本如何包含未来版本的功能,以及如何使用当前版本的Python成功地编译使用未来版本的功能的程序。 我猜想当前版本包含了将来的潜在功