XSLT Select 当前级别不同属性的节点

XSLT Select node at current level different attribute

我正在尝试找到最优雅的方法来根据开始日期和结束日期创建日期范围。我有以下 XML:

<mods:originInfo>
    <mods:dateCreated point="start">2006</mods:dateCreated>
    <mods:dateCreated point="end">2007</mods:dateCreated>
    <mods:dateCaptured point="start">2009</mods:dateCaptured>
    <mods:dateCaptured point="end">2010</mods:dateCaptured>
</mods:originInfo>

我有一个 XSLT,其中包括

<xsl:template match="mods:originInfo">
    <xsl:for-each select="child::*[@point='start']">
        <dc:date>
            <xsl:value-of select="."/>-<xsl:value-of select="../*[local-name()][@point='end']"/>
        </dc:date>
    </xsl:for-each>
</xsl:template>

当我运行这个时,我得到以下输出:

<dc:date>2006-2007</dc:date>
<dc:date>2009-2007</dc:date>

我正在尝试找到一种方法让此代码选择正确的 "end" 节点值。感谢任何帮助。

一次修改:将 ../ 替换为 following-sibling::,它应该可以工作:

<xsl:template match="mods:originInfo">
  <xsl:for-each select="child::*[@point='start']">
    <dc:date>
      <xsl:value-of select="."/>-<xsl:value-of select="following-sibling::*[local-name()][@point='end'][1]"/>
    </dc:date>
  </xsl:for-each>
</xsl:template>

输出:

<dc:date xmlns:dc="dc">2006-2007</dc:date>
<dc:date xmlns:dc="dc">2009-2010</dc:date>