在XSL节点选择中基于属性通配符排除节点

时间:2010-05-08 17:04:38

标签: xslt xpath cruisecontrol

使用cruisecontrol进行持续集成,我对Weblogic Ant任务有些烦恼,以及他们认为服务器调试信息是警告而不是调试,因此在我的构建报告电子邮件中显示。巡航的XML输出类似于:

<cruisecontrol>
<build>
    <target name="compile-xxx">
        <task name="xxx" />
    </target>
    <target name="xxx.weblogic">
        <task name="wldeploy">
            <message priority="warn">Message which isn't really a warning"</message>
        </task>
    </target>
</build>
</cruisecontrol>

在cruisecontrol XSL模板中,任务列表的当前选择是:

<xsl:variable name="tasklist" select="/cruisecontrol/build//target/task"/>

我想要的是以相同的方式选择任务列表,但不包括任何具有属性name =“* weblogic”的目标节点,其中*是通配符。我试过了

<xsl:variable name="tasklist" select="/cruisecontrol/build//target[@name!='*weblogic']/task"/>

但这似乎没有奏效。我不是XSLT的专家,只是想修复这个问题,这样我就可以继续进行项目的真正开发。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

  

在cruisecontrol XSL模板中   任务列表的当前选择   是:

<xsl:variable name="tasklist" select="/cruisecontrol/build//target/task"/>    
     

我想要的是什么   以相同的方式选择任务列表,   但不包括任何目标节点   哪个有属性   name =“* weblogic”,其中*是通配符

使用

  /cruisecontrol/build
                 //target
                     [not(substring(@name, string-length(@name)-7) 
                         = 'weblogic'
                          )
                     ]/task