XSLT选择当前级别不同属性的节点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSLT选择当前级别不同属性的节点相关的知识,希望对你有一定的参考价值。
我正在尝试找到基于开始和结束日期创建日期范围的最优雅方式。我有以下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>
我正试图找到一种方法让这段代码选择正确的“结束”节点值。任何帮助表示赞赏。
答案
一个修改:用../
替换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>
以上是关于XSLT选择当前级别不同属性的节点的主要内容,如果未能解决你的问题,请参考以下文章
如何为 XSLT 代码片段配置 CruiseControl 的 C# 版本?