XSLT-如果id的最后一个字符等于

时间:2019-01-25 17:15:52

标签: xml parsing xslt

晚上好

我在使用XSLT时遇到了麻烦,我必须检查/修改3年前开始的项目。

目前,应用模板的格式如下<xsl:apply-templates select="foo[make != 'Contoso'][prices/listPrice != '0.0'][type = 'USED']"/>

如果ID foo的最后一个字符是P,我需要将其丢弃并转到下一个字符。

我搜索了各种解决方案,但没有人能解决问题。

编辑:

我正在使用1.0 XSLT版本

1 个答案:

答案 0 :(得分:0)

我假设您输入的XML是这样的:

<root>
  <foo ID="XXXP">
    <make>Abcd</make>
    <prices>
      <listPrice>5000.0</listPrice>
    </prices>
    <type>USED</type>
  </foo>
  <foo ID="XXX">
    <make>Xyz</make>
    <prices>
      <listPrice>2000.0</listPrice>
    </prices>
    <type>USED</type>
  </foo>
</root>

要介绍您的修改,请将[not(ends-with(@ID, 'P'))]添加到 select属性,含义:

  • 其他谓词([...])。
  • 您引用当前元素(ID)的foo属性。
  • 您要求此ID不以P结尾。

由于您未指定XSLT版本,因此我使用的是2.0版。

有关工作示例,请参见http://xsltransform.net/3MP2uBF/1

附加说明:我认为,检查 price!= 0 的更好方法是:

[number(prices/listPrice) != 0]

(我在上述示例中包括了它。)

如果限于版本1.0,请使用相应的等效表达式 (1.0版没有ends-with函数)。