4

私は XSL の問題を解決するのにかなりの時間を費やしてきました。

基本的に、別の XSL ファイルで名前付きテンプレートを呼び出す、一致したテンプレートがあります。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:include href="/_internal/stylesheets/core/common" />

    <xsl:template match="system-page">

        <div id="main">
        <div class="pageHeading">
            <h1><system-page-display-name />&#160;</h1>
            <xsl:if test="current()/dynamic-metadata[name='Printable']/value='true' or current()/dynamic-metadata[name='Shareable']/value='true'">
                <xsl:call-template name="shareAndPrint">
                    <xsl:with-param name="shareable" select="current()/dynamic-metadata[name='Shareable']/value" />
                    <xsl:with-param name="printable" select="current()/dynamic-metadata[name='Printable']/value" />
                </xsl:call-template>
            </xsl:if>
        </div>
        <xsl:copy-of select="current()//system-data-structure/html/node()"/>
    </div>


    </xsl:template>

次に、他のファイルで、私が呼び出すテンプレートを次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:spring="http://www.springframework.org/tags" version="1.0">

<xsl:template name="shareAndPrint">

    <xsl:param name="shareable"/>
    <xsl:param name="printable"/>

    <div class="shareBar">
        <xsl:if test="$printable = 'true'">
            <a class="print" href="javascript:window.print();"><spring:message code="print.label" /></a>
        </xsl:if>
        <xsl:if test="$shareable = 'true'">
            <span class="st_sharethis" id="shareThis"></span>
        </xsl:if>
    </div>

    <xsl:if test="$shareable = 'true'">
        <script type="text/javascript">$('#shareThis').attr('displayText','ShareThis');</script>
        <script src="http://w.sharethis.com/button/buttons.js" type="text/javascript"></script>
    </xsl:if>

</xsl:template>

ご覧のとおり、私は基本的に XSL を使用して、サイトを翻訳するための spring:message タグを含む JSP ファイルを生成しています。

そして私の問題は基本的に、私が何をしても、XML出力には常に xmlns:spring="http://www.springframework.org/tags" を持つHTML要素が含まれることです。この種の問題に関連する他の多くの投稿を見てきましたが、どの解決策もうまくいかないようです。

出力例を次に示します。

<div id="main">
    <div class="pageHeading"><h1>CR-HTML-Static-WRS-en  - test&#160;</h1>
        <div class="shareBar" xmlns:spring="http://www.springframework.org/tags">
            <a class="print" href="javascript:window.print();">
                <spring:message code="print.label" />
            </a>
            <span class="st_sharethis" id="shareThis" ></span>
        </div>
        <script type="text/javascript" xmlns:spring="http://www.springframework.org/tags">$('#shareThis').attr('displayText','ShareThis');</script>
        <script src="http://w.sharethis.com/button/buttons.js" type="text/javascript" xmlns:spring="http://www.springframework.org/tags" ></script>
     </div>TEST CR</div>

xsl:stylesheet タグに exclude-result-prefixes を追加しようとしましたが、これにより HTML 要素から xmlns が削除されますが、代わりに spring:message タグに追加され、JSP が解析されたときに機能しません ( xmlns は spring:message の無効な属性です)。そのため、何が間違っているのか、他に何を試すことができるのかわかりません。

誰かがこれに対するアイデアや解決策を持っているなら、私はそれを大いに感謝します. 抜けがありましたら申し訳ありませんが、必要に応じて追加します。

前もって感謝します。

4

2 に答える 2

2

これらのプレフィックスの名前空間宣言なしで、結果に名前空間プレフィックスを含める必要があります。これはxslt では不可能です。そのような xml 出力は整形式ではないためです。そのため、これらのファイルに対して次のような後処理を行う必要があります。

sed -i 's# xmlns:spring="[^"]*"##g' output.html

注: 理論的には、出力エスケープを無効にするオプションがあります。これはお勧めしません。

于 2012-11-06T21:17:09.090 に答える
2

exclude-result-prefixes="spring"xsl:stylesheet 要素に追加するだけです。

デフォルトでは、 などのリテラル結果要素が、<div>スコープ内のすべての名前空間とともに結果ドキュメントにコピーされます。名前空間が要素または属性名で実際に使用されていない場合、exclude-result-prefixes 属性はこれを抑制します。spring:message 要素自体で名前空間宣言を引き続き取得しますが、おそらくこれが必要です。

于 2012-11-06T23:01:47.003 に答える