XSLT如何基于多个属性值筛选匹配节点并获取对应内容
问题原因
你现有写法的逻辑是分别校验「存在tag为856的datafield节点」、「存在ind1为4的datafield节点」、「存在ind2为2的datafield节点」,三个独立条件成立即进入判断分支,且取值时仅过滤了@tag='856'一个条件,因此会返回所有匹配tag=856的节点内容。
解决方法
将三个属性校验条件合并到同一个节点的筛选规则中,要求单个节点同时满足所有属性要求即可:
写法1:保留if校验逻辑
<xsl:if test="marc:datafield[@tag='856' and @ind1='4' and @ind2='2']"> <z:index name="thumbnailUrl_s Thumbnail"> <xsl:value-of select="marc:datafield[@tag='856' and @ind1='4' and @ind2='2']/marc:subfield[@code='u']"/> </z:index> </xsl:if>
写法2:简化为遍历写法(无需额外判断节点存在)
如果存在多个符合条件的节点,或者希望代码更简洁,可以直接用xsl:for-each遍历匹配节点,没有匹配节点时内部逻辑自动不会执行:
<xsl:for-each select="marc:datafield[@tag='856' and @ind1='4' and @ind2='2']"> <z:index name="thumbnailUrl_s Thumbnail"> <xsl:value-of select="marc:subfield[@code='u']"/> </z:index> </xsl:for-each>
内容的提问来源于stack exchange,提问作者André Luiz
相关产品推荐
相关产品推荐

