XSLT 2.0 / Java:系统响铃

时间:2016-01-01 14:57:38

标签: java xslt

我运行变换时的多任务。我想要一些模板匹配和后备来响铃系统铃以引起我的注意。

尝试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变体)。

如何在变换中敲响系统铃声?最有可能采用呼叫模板的形式。

2 个答案:

答案 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脚本)。命令行可以根据您的情况进行更改。

可能有更有效的方法来做到这一点,但这可能每天只会发射一到两次。