我还在学习XSLT,当我尝试使用'当'时显示节点的值。功能,只是没有出现。
我想出输入的xml(因为dspace不会给我任何显示):
<dc>
<creator>
<nameIdentifier> Caro </nameIdentifier>
<nameIdentifierScheme> URI </nameIdentifierScheme>
<nameScheme> Test </nameScheme>
<creatorName> Roger </creatorName>
</creator>
</dc>
我的代码:
<dc:identifier>
<xsl:for-each select="doc:metadata/doc:element[@name='dc']/doc:element[@name='creator']/doc:element">
<xsl:choose>
<xsl:when test="@name='nameIdentifierScheme'">
<xsl:attribute name="nameIdentifierScheme">
<xsl:value-of select="."></xsl:value-of>
</xsl:attribute>
</xsl:when>
<xsl:when test="@name='nameIdentifier'">
<xsl:value-of select="."></xsl:value-of>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</dc:identifier>
使用上面的代码,结果只打印一个案例:
<dc:identifier>570</dc:identifier>
要做的是:
<dc:identifier nameIdentifierScheme="URI" >570</dc:identifier>
我需要帮助才能理解为什么会这样。谢谢! :)
答案 0 :(得分:1)
从共享的XSLT中,看起来您正在尝试遍历<creator>
的所有子元素,这些元素不是获取所需输出所必需的。请注意<xsl:for-each>
不像其他编程语言那样以迭代方式循环遍历元素。它不会成为第一次迭代中元素nameIdentifierScheme
所在的位置,其值分配给属性然后在下一次迭代nameIdentifier
中找到并且其值分配给{ {1}}。
为了获得所需的输出,即具有属性identifier
的{{1}}元素,您可以使用以下代码。
<identifier>
此模板应用于共享XML
时@nameIdentifierScheme
提供以下输出
<xsl:template match="/">
<identifier>
<xsl:attribute name="nameIdentifierScheme">
<xsl:value-of select="dc/creator/nameIdentifierScheme" />
</xsl:attribute>
<xsl:value-of select="dc/creator/nameIdentifier" />
</identifier>
</xsl:template>
如果您想要删除值中的额外<dc>
<creator>
<nameIdentifier> Caro </nameIdentifier>
<nameIdentifierScheme> URI </nameIdentifierScheme>
<nameScheme> Test </nameScheme>
<creatorName> Roger </creatorName>
</creator>
</dc>
,可以使用<identifier nameIdentifierScheme=" URI "> Caro </identifier>
函数。