如何通过XPath匹配@rid提取对应aff元素的关联值?
解决XSLT中匹配@rid与@id提取对应机构信息的问题
核心逻辑:处理每个
<contrib>时,要基于当前节点的@rid属性值,精准定位到@id属性与之匹配的<aff>元素,而非全局选取所有<aff>节点。修正后的XPath写法:
根据你的XML结构层级选择对应写法:- 如果
<aff>在文档任意位置,用全局匹配结合当前节点属性:<xsl:value-of select="//aff[@id = current()/@rid]"/> - 如果
<aff>是<contrib>的兄弟节点(或可通过相对路径快速定位),用更高效的相对路径:<xsl:value-of select="../aff[@id = @rid]"/>
- 如果
完整示例(以常见学术XML结构为例):
XML源示例:<article> <aff id="aff1">北京大学计算机学院</aff> <aff id="aff2">清华大学电子工程系</aff> <contrib-group> <contrib rid="aff1">张三</contrib> <contrib rid="aff2">李四</contrib> </contrib-group> </article>对应XSLT模板:
<xsl:template match="contrib"> <p> <xsl:value-of select="."/> - <xsl:value-of select="//aff[@id = current()/@rid]"/> </p> </xsl:template>此写法会让每个作者仅输出对应的机构信息,不会重复显示所有机构内容。
关键细节:
current()函数用于锁定当前正在处理的<contrib>节点,确保匹配的是当前节点的@rid值,避免上下文混淆。- 优先使用相对路径替代全局路径
//aff,能大幅提升大XML文件的处理效率。
内容的提问来源于stack exchange,提问作者user2093335
相关产品推荐
相关产品推荐

