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

XSLT问题:筛选1970年出生的ime节点并获取上级imeK节点

问题:无法获取符合条件的zaposlen节点对应的上级imeK节点

需求:筛选出datum_rojstva包含1970的ime节点,同时获取该节点对应的上级imeK节点,但现有XSLT代码无法正确选中上级的imeK节点。

现有XSLT代码

<xsl:for-each select="seznam/kraj/zaposlen">
      <xsl:if test="contains(datum_rojstva, '1970')">   
        <xsl:value-of select="concat(ime,' ',../imeK"/><br/>
      </xsl:if> 
</xsl:for-each> 

对应的XML代码

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="test.xsl" type="text/xsl"?>
<seznam>
  <kraj>
    <imeK>Maribor</imeK>
    <zaposlen>
      <DS>3213212</DS>
      <ime>Ana</ime>
      <priimek>Bregar</priimek>
      <datum_rojstva>1984-01-01</datum_rojstva>
      <placa>1932.60</placa>
    </zaposlen>
    <zaposlen>
      <DS>1231232</DS>
      <ime>Vesna</ime>
      <priimek>Lampret</priimek>
      <datum_rojstva>1970-01-01</datum_rojstva>
      <placa>1650.55</placa>
    </zaposlen>
  </kraj>
  <kraj>
    <imeK>Ljubljana</imeK>
    <zaposlen>
      <DS>1234567</DS>
      <ime>Jana</ime>
      <priimek>Novak</priimek>
      <datum_rojstva>1990-10-20</datum_rojstva>
      <placa>1000.35</placa>
    </zaposlen>
    <zaposlen>
      <DS>3334445</DS>
      <ime>Peter</ime>
      <priimek>Kos</priimek>
      <datum_rojstva>1970-11-15</datum_rojstva>
      <placa>1732.35</placa>
    </zaposlen>
    <zaposlen>
      <DS>9876543</DS>
      <ime>Jure</ime>
      <priimek>Erlah</priimek>
      <datum_rojstva>1978-12-15</datum_rojstva>
      <placa>2038.35</placa>
    </zaposlen>
  </kraj>
</seznam>

错误原因分析

现有代码中../imeK的路径是正确的——当前上下文是zaposlen节点,../指向其父节点kraj,可以正常访问imeK。问题出在**concat函数缺少闭合括号**,导致XSLT解析失败,无法执行后续逻辑。

修正后的XSLT代码

基础修复版本

<xsl:for-each select="seznam/kraj/zaposlen">
  <xsl:if test="contains(datum_rojstva, '1970')">   
    <xsl:value-of select="concat(ime,' ',../imeK)"/><br/>
  </xsl:if> 
</xsl:for-each>

优化版本(整合过滤条件)

将过滤条件直接放到xsl:for-each的select属性中,减少冗余的xsl:if,代码更简洁高效:

<xsl:for-each select="seznam/kraj/zaposlen[contains(datum_rojstva, '1970')]">
  <xsl:value-of select="concat(ime,' ',../imeK)"/><br/>
</xsl:for-each>

效果说明

修正后的代码会输出:

Vesna Maribor
Peter Ljubljana

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:35:07