微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何选择多个节点的值并在单个条件下对其进行测试?

如何解决如何选择多个节点的值并在单个条件下对其进行测试?

为了继续这个 post,我重新构造了代码以更好地理解我的要求。我还提供了更多细节。

XML 文件

<Person>
  <Name>Kavya</Name>
  <Gift>
    <ItemName>PD1</ItemName>
  </Gift>
  <Gift>
    <ItemName>PS1</ItemName>
  </Gift>
  <Gift>
    <ItemName>PD2</ItemName>
  </Gift>
</Person>

现在,在上述结构中,仅当 Person 具有 GiftItemName 时,我才需要返回文本 Successfull 或只有 PS1 而没有 PD1PD2。因此,在编写 XSLT 文件时,我使用了以下方法

XSLT 文件(示例)

<Test>
  <xsl:choose>
    <xsl:when test="//Person/Gift[ItemName='PS1' and ItemName!='PD1']">
      <xsl:text>Successfull</xsl:text>
    </xsl:when>
  </xsl:choose>
</Test>

截至目前,它返回成功,因为其中一个礼物的 ItemName 为“PS1”。但是,根据我的需要,它不能显示任何内容,因为虽然有一个 ItemName 为 'PS1',但该人仍然拥有 ItemName 为 'PD1' 和 'PD2' 的礼物

准确地说,我不想检查 Gift 中的单个 ItemName。我试图检查这个人(作为一个整体)是否有 PS1 而不是 PD1 或 PD2

希望这很清楚。请协助。

解决方法

在 XSLT 2.0 中,您可以使用 exists():

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/Person">
    <xsl:choose>
      <xsl:when test="./Gift[ItemName='PS1'] and not(exists(./Gift[ItemName='PD1']))">
        <xsl:text>Sample</xsl:text>
      </xsl:when>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。