gpt4 book ai didi

xslt - 在 icecast 服务器的 xslt 实现中检测 node-set() 函数的可用性

转载 作者:行者123 更新时间:2023-12-04 02:11:19 29 4
gpt4 key购买 nike

Icecast 包含基于 libxslt 的 XSLT 实现来自 xmlsoft .

我想知道它是否支持 node-set()功能,最好以也适用于其他仅网络环境的方式:

Regrettably, the XSLT processor in icecast is only web accessible through the web interface of the icecast process (so no xsltproc on the commandline). To worsen it: there is limited logging of the XSLT errors (when you do things wrong, the icecast process often just dies).

我正在运行 icecast 2.3.2,因为它是 latest Windows based build (有 no 2.3.3 build for Windows yet ),它的 libxslt.dll 日期为 2008 年。DLL 中没有版本号,我能提供的最好的是这个(见底部的 XSLT 代码):

Version:    1.0
Vendor: libxslt
Vendor URL: http://xmlsoft.org/XSLT/

我尝试运行 David Carlisle's blog 中提到的节点集检测文章 The EXSLT node-set function由“How to use node-set function in a platform-independent way?”指向。

从输出来看,我认为失败了:

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>

最佳答案

简答

libxslt in icecast supports the xt:node-set() function.
Underneath it is implemented in by the xsltFunctionNodeSet() function.

通用答案

我创建了一个基于 CSTUG bibliography XSLT 的解决方案使用 function system-property .

如果这确实是执行此操作的正确方法,请发表评论。

CSTUG 代码处理这些 node-set() 函数:

  • exslt:节点集()
  • msxml:节点集()
  • xalanc:节点集()

我也添加了对这些的支持:

  • xt:节点集()
  • saxon6:node-set()

icecast 的输出:

Version:    1.0
Vendor: libxslt
Vendor URL: http://xmlsoft.org/XSLT/
node-set(): xt:node-set()

使用的 XSLT:

<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exslt="http://exslt.org/common"
xmlns:msxml="urn:schemas-microsoft-com:xslt"
xmlns:xalanc="http://xml.apache.org/xalanc"
xmlns:xt="http://www.jclark.com/xt"
xmlns:saxon6="http://icl.com/saxon"
extension-element-prefixes="exslt msxml xalanc xt saxon6"
exclude-result-prefixes="exslt msxml xalanc xt saxon6"
>

<xsl:output method="text" encoding="UTF-8" />
<xsl:template match="/">
<xsl:text>
Version: </xsl:text>
<xsl:value-of select="system-property('xsl:version')" />
<xsl:text>
Vendor: </xsl:text>
<xsl:value-of select="system-property('xsl:vendor')" />
<xsl:text>
Vendor URL: </xsl:text>
<xsl:value-of select="system-property('xsl:vendor-url')" />
<!--
Prefixes used for node-set()
exslt: EXSLT aware processors (Saxon, xsltproc, Xalan-J, jd.xslt, 4XSLT)
msxml: MSXML
xalanc: Xalan-C, Xalan-J 2.6.x
xt: XT, libxslt
saxon6: Saxon 6
-->
<xsl:text>
node-set(): </xsl:text>
<xsl:choose>
<xsl:when test="function-available('exslt:node-set')">
<xsl:text>exslt:node-set()</xsl:text>
</xsl:when>
<xsl:when test="function-available('msxml:node-set')">
<xsl:text>msxml:node-set()</xsl:text>
</xsl:when>
<xsl:when test="function-available('xalanc:nodeset')">
<xsl:text>xalanc:nodeset()</xsl:text>
</xsl:when>
<xsl:when test="function-available('xt:node-set')">
<xsl:text>xt:node-set()</xsl:text>
</xsl:when>
<xsl:when test="function-available('saxon6:node-set')">
<xsl:text>saxon6:node-set()</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>EXSLT:node-set not found!</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

关于xslt - 在 icecast 服务器的 xslt 实现中检测 node-set() 函数的可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17265064/

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