You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:36:02