按位置迭代并抓取节点

时间:2016-11-11 01:18:40

标签: xml xslt xslt-1.0

我想将重复结构中的xml节点按位置复制到另一个重复结构...意味着第一个节点转到第一个节点,依此类推......

非常感谢帮助!..

1 个答案:

答案 0 :(得分:0)

试试这个:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:key name="error" match="XmlerrorItmOut/item" use="count(preceding-sibling::item) + 1"/>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Xmlitem/item">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
      <xsl:copy-of select="key('error', position())/YyextError"/>
      <xsl:copy-of select="key('error', position())/YyerrorDesc"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

首先我们创建密钥。我们使用前面的兄弟节点计数而不是位置。虽然如果你有数以千计的物品可能会很慢,但它确实有效。

identity transform“按原样”复制每个节点。

第二个模板匹配任何Xmlitem/item元素,复制内容并按键添加错误元素。