0

私の目標: XSL スタイルシートを使用して XML ドキュメントの「生年月日」要素を「年齢」値に変換し、XHTML ページを生成する必要があります。Web ブラウザー (IE/FF など) を直接使用して XML ドキュメントを開きます。

XSLT 2.0 に日付と時刻の関数が組み込まれていることは知っていますが、現在これをサポートしているブラウザーはないと思います。そのため、代わりに EXSLT 関数を使用しようとしましたが、成功しませんでした。

サンプル テスト ファイルは次のとおりです。

test.xml

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<test>
</test>

test.xsl

<xsl:stylesheet version="1.0"
                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                 xmlns:date="http://exslt.org/dates-and-times">
<xsl:output method="text"/>
<xsl:template match="/">
     <xsl:value-of select="date:date-time()"/>
</xsl:template>
</xsl:stylesheet>

IE8 でのエラー:

Namespace 'http://exslt.org/dates-and-times' does not contain any functions. 

FF4 のエラー:

Error during XSLT transformation: An unknown XPath extension function was called.

EXSLT は主要な Web ブラウザーでサポートされていないということですか? SAXON/Xalan のような XSLT プロセッサを使用する必要がありますか? 私は何か間違ったことをしていますか?別の方法はありますか?

4

1 に答える 1

0

EXSLT サポート マトリックスを参考にしてください。

次の XSLT プロセッサは、date:date-time をサポートしています。

SAXON from Michael Kay (version 6.4.2)
Xalan-J from Apache (version 2.4.D1)
4XSLT, from 4Suite. (version 0.12.0a3)
libxslt from Daniel Veillard et al. (version 1.0.19)

libxsltChrome、Opera、Safari で使用されdate-time()ますが、EXSLT が無効になっているため機能しません:

関数を少しずつ追加するのは意味がないと思います。5 年近く経っても、libexslt がビルドに組み込まれ、exsltRegisterAll() が XSLTExtensions.cpp の registerXSLTExtensions() から呼び出されることを妨げるものはまだありますか?

IE はMSXML、以下をサポートする を使用します。

MSXML4 では、後者の問題を解決するために ms:format-date() と ms:format-time() という 2 つの優れた拡張関数が提供されましたが、これらは .NET または MSXML3 ではサポートされていません。

機能はありませんms:date-time()が、MSXSL拡張機能があります。

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:ecma ="about:ecma">
    <msxsl:script implements-prefix="ecma">
     <![CDATA[
      function GetCurrentDateTime()
        {
        var currentTime = new Date();
        var month = currentTime.getMonth() + 1;
        var day = currentTime.getDate();
        var year = currentTime.getFullYear();
        return(month + "/" + day + "/" + year);
        }
     ]]>
    </msxsl:script>

<xsl:template match="/">
    <xsl:value-of select="ecma:GetCurrentDateTime()"/>
</xsl:template>

</xsl:stylesheet>

Firefox は、FF6以降の EXSLTをサポートするTransformiixを使用します。date-time()

参考文献

于 2014-06-04T20:07:58.040 に答える