Icecast には、 xmlsoftのlibxsltに基づく XSLT 実装が含まれています。
それがnode-set()関数をサポートしているかどうかを知りたいのですが、できれば他の Web 専用環境でも機能する方法で:
残念ながら、icecast の XSLT プロセッサは、icecast プロセスの Web インターフェイスを介してのみ Web アクセスできます (したがって、コマンドラインにxsltprocはありません)。さらに悪いことに、XSLT エラーのログ記録が限られています (間違ったことをすると、icecast プロセスが停止することがよくあります)。
これは最新の Windows ベースのビルド( Windows用の 2.3.3 ビルドはまだありません) であるため、icecast 2.3.2 を実行しています。2008 年の日付の libxslt.dll があります。DLL にはバージョン番号がありません。これを提供できます(下部のXSLTコードを参照):
Version: 1.0
Vendor: libxslt
Vendor URL: http://xmlsoft.org/XSLT/
David Carlisle のブログ記事「プラットフォームに依存しない方法でノード セット関数を使用する方法」で指摘されているEXSLT ノード セット関数で言及されているノード セット検出を実行してみました。
出力から、失敗すると思います:
icemaster@localhost972990localhost00EarthIcecast 2.3.2Sun, 23 Jun 2013 20:02:19 W. Europe Daylight Time202200ice-samplerate=44100;ice-bitrate=64;ice-channels=264StationGenre6424410000http://localhost:8000.....
Web インターフェースで XSL ファイルを介して見つける最良の方法は何でしょうか?
バージョン スクリプト:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="text" encoding="UTF-8" />
<xsl:template match="/">
Version: <xsl:value-of select="system-property('xsl:version')" />
Vendor: <xsl:value-of select="system-property('xsl:vendor')" />
Vendor URL: <xsl:value-of select="system-property('xsl:vendor-url')" />
</xsl:template>
</xsl:stylesheet>
私が試したノードセットスクリプト:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exslt="http://exslt.org/common"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="exslt msxsl">
<xsl:output
omit-xml-declaration="no"
method="html"
indent="yes"
encoding="UTF-8" />
<msxsl:script language="JScript" implements-prefix="exslt">
this['node-set'] = function (x) {
return x;
}
</msxsl:script>
<xsl:variable name="x">
<y/>
</xsl:variable>
<xsl:template match="x">
<html>
<head><title>test exslt node set</title></head>
<body>
<xsl:apply-templates select="exslt:node-set($x)/*"/>
</body>
</html>
</xsl:template>
<xsl:template match="y">
<p>node set!</p>
</xsl:template>
</xsl:stylesheet>