Цикл XSL: как зациклить, где увеличивается имя узла - PullRequest
0 голосов
/ 19 января 2010

Как бы один цикл проходил через набор узлов, где имя узла имеет числовой номер и число увеличивается, как в серии?

например:

<nodes>
  <node1>
  <node2>
  ...
  <node10>
</nodes>

Ответы [ 3 ]

2 голосов
/ 19 января 2010

Если я не пропускаю что-то полностью, то все, что вам нужно, так просто.

<xsl:template match="nodes">
    <xsl:for-each select="*">
        <!-- Do what you want with each node. -->
    </xsl:for-each>
</xsl:template>
1 голос
/ 19 января 2010

Рекурсивный именованный шаблон может сделать это:

<xsl:template name="processNode">
  <xsl:param name="current" select="1"/> 
  <xsl:variable name="currentNode" select="*[local-name() = concat('node', $current)]"/>

  <xsl:if test="$currentNode">
    <!-- Process me -->
    <xsl:call-template name="processNode">
      <xsl:with-param name="current" select="$current + 1"/>
    </xsl:call-template>
  </xsl:if>
</xsl:template>

Или, если вам не важен порядок, просто обычный шаблон:

<xsl:template match="*[starts-with(local-name(), 'node')]">
</xsl:template>
0 голосов
/ 20 января 2010
<xsl:template match="nodes">
  <xsl:apply-templates select="*">
    <!-- the xsl:sort is redundant if the input already is in correct order -->
    <xsl:sort select="substring-after(name(), 'node')" data-type="number" />
  </xsl:apply-templates>
</xsl:template>

<xsl:template match="nodes/*">
  <!-- whatever -->
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...