簡體   English   中英

XSLT CallTemplate ForEach XML擴展功能

[英]XSLT CallTemplate ForEach XML extension function

我希望$ content是預期的字符串。 我知道$ content的copy-of而不是value-會產生預期的字符串。 但是,如何不使用copy-of並將其傳遞給Java擴展函數呢?

在這里問了另一個不同的問題。

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方法進行序列化可能更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM