我在运行转换时多任务。我想要一些模板匹配和后备敲响系统钟,以吸引我的注意力。
尝试1:一个java调用来敲响系统铃铛,但一直无法使它工作(我的java知识有限)。
作为一个起点,我尝试修改这个模板,它是在OxygenXML环境中使用Saxon的一个工作的4秒钟睡眠实现。没有成功。
<xsl:template name="sleep" xmlns:thread="java.lang.Thread">
<xsl:value-of select="thread:sleep(4000)"/>
</xsl:template>尝试2:我尝试了各种<xsl:message select="'asci bell foo'"/>来尝试并敲响一个系统铃铛。不走运。
放大信息:我使用的是最新的Linux ( Ubuntu变体)。
我怎样才能在转换中敲响系统的钟声呢?很可能以调用模板的形式出现。
发布于 2016-01-02 15:22:23
我在Windows 10上使用命令行中的Saxon9.6和9.7PE尝试了以下方法,无论是在普通命令提示符中还是在PowerShell窗口中:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:sys="java:java.lang.System"
xmlns:ps="java:java.io.PrintStream"
exclude-result-prefixes="xs sys ps"
version="2.0">
<xsl:template name="bell">
<xsl:variable name="serr" select="sys:err()"/>
<xsl:value-of select="ps:write($serr, 7)"/>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="foo">
<xsl:call-template name="bell"/>
<bar>
<xsl:apply-templates/>
</bar>
</xsl:template>
</xsl:stylesheet>当对具有foo元素的XML输入文档运行时,它确实会发出声音,但是看起来只有一个声音产生,即使模板被匹配了几次。
发布于 2016-01-03 17:18:21
我查了马丁的Q作为答案。他按要求回答了这个问题。
然而,系统铃是微弱的,所以当我想起这个Stack Q:Can XSLT execute a shell script at the OS level?时,我走到了一个不同的方向。演示:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:os-command="java:java.lang.Runtime"
exclude-result-prefixes="xs os-command"
version="2.0">
<xsl:template match="/">
<xsl:call-template name="tone"/>
</xsl:template>
<xsl:template name="tone">
<xsl:value-of
select="os-command:exec(os-command:getRuntime(),'aplay /usr/share/sounds/linuxmint-gdm.wav')"/>
</xsl:template>
或
<xsl:template name="tone" xmlns:os-command="java.lang.Runtime">
<xsl:value-of select="os-command:exec(os-command:getRuntime(),'aplay /usr/share/sounds/linuxmint-gdm.wav')"/>
</xsl:template>它在Linux中播放一个wav文件(不是shell脚本)。命令行可以更改为您的情况。
也许有更有效的方法来做到这一点,但是这可能一天只会触发一到两次。
https://stackoverflow.com/questions/34557200
复制相似问题