1

我正在转换一个连接两个标签值的 XML 文档:

  <xsl:variable name="label">
    <xsl:value-of select="label"/>
  </xsl:variable>
  <xsl:variable name="nr">
    <xsl:value-of select="nr"/>
  </xsl:variable>
  <xsl:variable name="label_nr">
    <xsl:value-of select="concat($label, ' ', $nr)"/>
  </xsl:variable>

这适用于

  <label>Article</label>
  <nr>1</nr>

但我想要以下

  <nr>First</nr>
  <label>article</label>

生成“第一篇文章”,而不是“第一篇文章”。有没有一种简单的方法来区分 XSLT 中的标签顺序?

4

3 回答 3

2

为了使事情变得更简单,请尝试

<xsl:value-of select="concat((nr | label)[1], ' ', (nr | label)[2])"/>

这将连接元素集的第一个和第二个元素(nr | label)

请注意,(nr | label)与 完全相同(label | nr)。集合中元素的顺序由 XML 中元素的顺序决定。

因为元素的原始顺序保留在此集合中,所以[1]将选择[2]树中的第一个元素和第二个元素。

于 2013-07-23T11:29:49.320 回答
1

您应该能够使用轴来执行此操作:

<xsl:variable name="label_nr">
    <xsl:choose>
        <xsl:when test="name(nr/following-sibling::node()[1]) = 'label'"><xsl:value-of select="concat($nr, ' ', $label)"/></xsl:when>
        <xsl:otherwise><xsl:value-of select="concat($label, ' ', $nr)"/></xsl:otherwise>
    </xsl:choose>
</xsl:variable>

nr/following-sibling::node()[1]正在从节点中选择下一个nr节点。我们需要 [1],因为轴following-sibling::将获取所有后续节点,因此[1]只需获取下一个节点即可。然后我们只是使用name()来获取元素的名称。希望从那里清楚地知道发生了什么。

于 2013-07-23T11:17:39.017 回答
1

在 XSLT 2.0 中,使用

<xsl:value-of select="label|nr"/>

就这样。

于 2013-07-23T12:56:35.867 回答