如何使用 xslt 获取与特定元素值匹配的最后一条记录?

Posted

技术标签:

【中文标题】如何使用 xslt 获取与特定元素值匹配的最后一条记录?【英文标题】:How to get the last records that match a specific element value using xslt? 【发布时间】:2021-05-07 20:49:35 【问题描述】:

我有一个 xml,其中包含如下所示的汽车记录列表

 <Car>
    <color>red</color>
    <type>toyota</type>
   <status>done</status>
  </Car>
  <Car>
    <color>green</color>
    <type>mazda</type>
    <status>done</status>
  </Car>
  <Car>
    <color>yellow</color>
    <type>ford</type>
  <status>working</status>
  </Car>
  <Car>
    <color>green</color>
    <type>mazda</type>
    <status>pending</status>
  </Car>

我目前正在获取最后一次这样的汽车记录

<Cars>
      <Car> 
          <xsl:copy-of select="//Car[last()]"/>
      </Car>       
  </Cars>

我想看看是否有可能获得与我的元素值匹配的最后一辆汽车记录

例子

从上面的 xml 示例中,我想获取不包含挂起状态的最后一辆汽车记录,因此我的输出如下所示。

这是最后一条符合我条件的记录

 <Car>
    <color>yellow</color>
    <type>ford</type>
  <status>working</status>
  </Car>

而且也只有这样的我想要的记录。

<Cars>
<Car>
        <color>yellow</color>
      <status>working</status>
      </Car>
<Cars>

【问题讨论】:

【参考方案1】:

你可以这样做:

<Cars>
  <Car> 
      <xsl:copy-of select="//Car[not(status='pending')][last()]"/>
  </Car>       
</Cars>

【讨论】:

你可以在这里测试它:xsltfiddle.liberty-development.net/gVrvcxU 如果我只想获取颜色和状态,我能做什么,所以输出看起来像这样 yellowworking汽车> 阅读有关 XSLT 工作原理的书籍或教程? 你推荐我读什么书或教程来帮助我。谢谢 我有这本书,发现它是一本很好的参考书:XSLT 2.0 and XPath 2.0 Programmer's Reference, 4th Edition by Michael Kay

以上是关于如何使用 xslt 获取与特定元素值匹配的最后一条记录?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取jQuery集合的某一项

xslt2+ 如何将组与任何匹配的元素组合并删除元素的重复项

如何在 XSLT 中对值进行分组和求和

如果值匹配,XSLT 会更改兄弟元素的子元素值

XSLT:测试当前元素是不是匹配变量 xpath

XSLT 希望删除属性然后重新匹配元素