首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT2.0/ Java: System

XSLT2.0/ Java: System
EN

Stack Overflow用户
提问于 2016-01-01 14:57:38
回答 2查看 456关注 0票数 0

我在运行转换时多任务。我想要一些模板匹配和后备敲响系统钟,以吸引我的注意力。

尝试1:一个java调用来敲响系统铃铛,但一直无法使它工作(我的java知识有限)。

作为一个起点,我尝试修改这个模板,它是在OxygenXML环境中使用Saxon的一个工作的4秒钟睡眠实现。没有成功。

代码语言:javascript
复制
 <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变体)。

我怎样才能在转换中敲响系统的钟声呢?很可能以调用模板的形式出现。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-02 15:22:23

我在Windows 10上使用命令行中的Saxon9.6和9.7PE尝试了以下方法,无论是在普通命令提示符中还是在PowerShell窗口中:

代码语言:javascript
复制
<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输入文档运行时,它确实会发出声音,但是看起来只有一个声音产生,即使模板被匹配了几次。

票数 0
EN

Stack Overflow用户

发布于 2016-01-03 17:18:21

我查了马丁的Q作为答案。他按要求回答了这个问题。

然而,系统铃是微弱的,所以当我想起这个Stack Q:Can XSLT execute a shell script at the OS level?时,我走到了一个不同的方向。演示:

代码语言:javascript
复制
<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>

代码语言:javascript
复制
    <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脚本)。命令行可以更改为您的情况。

也许有更有效的方法来做到这一点,但是这可能一天只会触发一到两次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34557200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档