【发布时间】:2018-03-16 23:39:38
【问题描述】:
我正在学习 XSLT 1.0,但我的逻辑和知识也有点问题。我正在使用 dspace 6,我想更改一些 xslt 行代码的输出。
当我检索一些元数据时:
<xsl:for-each select="doc:metadata/doc:element[@name='dc']/doc:element[@name='date']/doc:element[@name='dateType']/doc:element/doc:field[@name='value']">
<creator><xsl:value-of select="." /></creator>
</xsl:for-each>
我明白了:
<creator>Pavel Hitch</creator>
<creator>Adan Riviera</creator>
我想做的是看起来像这样:
<creators>
<creator>Pavel Hitch</creator>
<creator>Adan Riviera</creator>
</creators>
编辑:我的问题是当我只得到一个值时,只放置“创建者标签”,但返回两个或更多值时,添加“创建者”父级。
我尝试将“foreach”输出保存到一个变量中,使用 position() 和 last() 来制作一些条件,但是“creators”标签只是重复自己(感谢 te foreach),尝试这给了我一些关闭标签错误:
xsl:for-each select="doc:metadata/doc:element[@name='dc']/doc:element[@name='date']/doc:element[@name='dateType']/doc:element/doc:field[@name='value']">
<xsl:variable name="lastPos" select="last()"/>
<xsl:variable name="initPos" select="position()"/>
<xsl:if test="$lastPos>'1' and $initPos='1' ">
<Creators>
</xsl:if>
<creator><xsl:value-of select="." /></creator>
<xsl:if test="$lastPos = $initPos">
</Creators>
</xsl:if>
</xsl:for-each>
希望你能帮帮我,我真的是新手。
谢谢! :)
【问题讨论】: