我运行变换时的多任务。我想要一些模板匹配和后备来响铃系统铃以引起我的注意。
尝试1 :用来响铃系统铃声的java调用,但无法使其正常工作(我的java知识有限)。
作为一个起点,我尝试在使用Saxon PE的OxygenXML环境中更改此模板,这是一个有效的4秒 sleep 实现。没有成功。
<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 Mint(Ubuntu变体)。
如何在变换中敲响系统铃声?最有可能采用呼叫模板的形式。
答案 0 :(得分:0)
我在命令行中使用Saxon 9.6和9.7 PE在Windows 10上尝试了以下方法,无论是在正常的命令提示符还是在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输入文档运行时会发出声音,但看起来只有一个声音产生,即使模板多次匹配也是如此。
答案 1 :(得分:0)
我检查了马丁的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 Mint中播放一个wav文件(不是shell脚本)。命令行可以根据您的情况进行更改。
可能有更有效的方法来做到这一点,但这可能每天只会发射一到两次。