gpt4 book ai didi

java - XSLT CallTemplate ForEach XML 扩展函数

转载 作者:行者123 更新时间:2023-12-01 15:04:54 24 4
gpt4 key购买 nike

我希望 $content 成为预期的字符串。我知道 copy-of 而不是 value-of $content 会产生预期的字符串。但是我如何不使用 copy-of 并将其传递给 java 扩展函数呢?

我问了一个不同的相关问题here .

XML

<?xml version="1.0"?>
<a>
<b c="d"/>
<b c="d"/>
<b c="d"/>
</a>

XSL

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="foo">
<xsl:param name="content"></xsl:param>
<!-- <xsl:copy-of select="$content"></xsl:copy-of> -->
<!-- copy-of produces the expected string here, but how to pass to Java -->
<xsl:value-of select="java:someMethod($content)" />
<!-- I want the content to be the expected string -->
</xsl:template>

<xsl:template match="/">
<xsl:call-template name="foo">
<xsl:with-param name="content">
<xsl:for-each select="a/b">
<e>
<xsl:value-of select="@c" />
</e>
</xsl:for-each>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>

需要从 $content 传递到 Java 扩展函数的字符串。

<?xml version="1.0"?>
<e>d</e>
<e>d</e>
<e>d</e>

PS:调用 foo 是强制的。

最终,我的目标是使用扩展功能来模拟 XSLT 1.0 中的结果文档。

最佳答案

调用 Java 扩展函数取决于您使用的 XSLT 处理器,但您没有告诉我们。如果您使用 Java 的 TransformerFactory,您将获得类路径上的任何内容,例如 Xalan 的内置版本、Xalan 的 Apache 版本或 Saxon。

您的描述表明您希望将包含词汇 XML 的字符串传递给 Java 扩展函数。这意味着您需要将节点序列化为字符串。如果没有 saxon:serialize() 等扩展函数,这是无法实现的。将节点传递给 Java 方法并让 Java 方法执行序列化可能更容易。

关于java - XSLT CallTemplate ForEach XML 扩展函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13107399/

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