XSLT - 当案例没有显示时

时间:2018-03-21 01:38:18

标签: xml xslt conditional-statements

我还在学习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> 

我需要帮助才能理解为什么会这样。谢谢! :)

1 个答案:

答案 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> 函数。