繁体   English   中英

适用于Linux CLI的XSLT 2.0处理器/ XSLT 1.0中的contains()函数

[英]XSLT 2.0 processor for Linux CLI / contains() function in XSLT 1.0

这不是100%的编程问题,但我希望它适合这里。

您知道用于Linux(CLI)的任何轻量级XSLT 2.0处理器吗?

xsltproc适用于XSLT版本。 仅1.0。

我只找到了saxon处理器,但这需要Java(我确实不想安装)。

或者,您可以为我推荐一个针对contains()函数的XSLT v1解决方案吗?

这是我的XSLT:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />

    <xsl:template match="@*|node()">
       <xsl:for-each select="offer[contains(lower-case(name),'find this one')]">
         <xsl:copy-of select="."/>
       </xsl:for-each>
    </xsl:template>

</xsl:transform>

我不知道这样的处理器,但是通过使用translate函数替换lower-case ,将样式表重新编码为1.0兼容是相对简单的,然后它将与xsltproc

如果您想选择所有 offer符合条件的元素(也有可能是其中的一个以上),那么你需要用他们都围绕着一个根级别元素:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />

    <xsl:template match="/">
       <offers>
          <xsl:copy-of select="//offer[contains(
             translate(name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
             'find this one')]" />
       </offers>
    </xsl:template>

</xsl:transform>

如果您知道将只有一个匹配的报价,那么您不一定需要wrapper元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM