这不是100%的编程问题,但我希望它适合这里。
你知道Linux(cli)的任何轻量级XSLT 2.0处理器吗?
xsltproc用于XSLT版本。仅限1.0。
我发现只有撒克逊处理器,但这个需要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>
答案 0 :(得分:2)
我不知道这样的处理器,但通过使用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>
如果您知道只有一个匹配商品,那么您不一定需要包装元素。