如何选择多个节点的值并在单个条件下对其进行测试?
How to pick value of multiple nodes and test it in a single condition?
作为此 post 的延续,我重构了代码以更好地理解我的要求。我也提供了更多细节。
XML 文件
<Person>
<Name>Kavya</Name>
<Gift>
<ItemName>PD1</ItemName>
</Gift>
<Gift>
<ItemName>PS1</ItemName>
</Gift>
<Gift>
<ItemName>PD2</ItemName>
</Gift>
</Person>
现在,在上面的结构中,我需要 return 文本 Successfull 只有当 Person 有 Gift ItemName empty 或者只有 PS1 而不是 PD1 或 PD2。因此,在编写 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>
截至目前,它 return 成功了,因为其中一件礼物的 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>
作为此 post 的延续,我重构了代码以更好地理解我的要求。我也提供了更多细节。
XML 文件
<Person>
<Name>Kavya</Name>
<Gift>
<ItemName>PD1</ItemName>
</Gift>
<Gift>
<ItemName>PS1</ItemName>
</Gift>
<Gift>
<ItemName>PD2</ItemName>
</Gift>
</Person>
现在,在上面的结构中,我需要 return 文本 Successfull 只有当 Person 有 Gift ItemName empty 或者只有 PS1 而不是 PD1 或 PD2。因此,在编写 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>
截至目前,它 return 成功了,因为其中一件礼物的 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>