2

XSL でイテレーション番号を取得したいのですが、foreach には条件があり、イテレーションを書きたいのですが、条件が true の場合のみです。

「position()」を使用し、テーブルに位置を書きたいと思います。

<xsl:for-each ... >
  <xsl:if test="Jordan = $name">
    <xsl:value-of select="position() = 1">
  </xsl:if>
</xsl:for-each>

この1-3を手に入れた後、1-2をお願いします(成功条件のみ)

私の XML :

<root>
  <user>
    <name>Jordan</name>
    <forename>Michael</forename>
  </user>
  <user>
    <name>Braun</name>
    <forename>Steve</forename>
  </user>
  <user>
    <name>Jordan</name>
    <forename>David</forename>
  </user>
</root>

期待される出力 HTML テーブル

<table>
  <tr>
    <td>1</td>
    <td>Michael</td>
  </tr>
  <tr>
    <td>2</td>
    <td>David</td>
  </tr>
</table>
4

2 に答える 2

0

編集: OP は新しい情報を提供するために質問を変更しました。これには、元の回答とは異なる回答が必要です。

子が "Jordan" で<user>ある要素の情報のみを出力することが目標の場合、この XSLT はトリックを行う必要があります。<name>

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output omit-xml-declaration="yes" indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="/*">
    <table>
      <xsl:apply-templates select="*[name = 'Jordan']/forename"/>
    </table>
  </xsl:template>

  <xsl:template match="forename">
    <tr>
      <td>
        <xsl:value-of select="position()"/>
      </td>
      <td>
        <xsl:apply-templates/>
      </td>
    </tr>
  </xsl:template>

</xsl:stylesheet>

編集:この答えは後世に残されています。

これを「インクリメント ループの問題」(手続き的な方法論に近い) と見なすのではなく、少なくとも XSLT に関連するものとして、この問題をグループ化の問題と見なします。XSLT 1.0 でこれを行うことは、Muenchian Groupingを使用することを意味します。

この XSLT の場合:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output omit-xml-declaration="yes" indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:key name="kForenames" match="forename" use="."/>

  <xsl:template match="/*">
    <table>
      <xsl:apply-templates
        select="*/forename[generate-id() =
                           generate-id(key('kForenames', .)[1])]"/>
    </table>
  </xsl:template>

  <xsl:template match="forename">
    <tr>
      <td>
        <xsl:value-of select="position()"/>
      </td>
      <td>
        <xsl:apply-templates/>
      </td>
    </tr>
  </xsl:template>

</xsl:stylesheet>

...提供された XML に対して適用されます。

<root>
  <user>
    <name>Jordan</name>
    <forename>Michael</forename>
  </user>
  <user>
    <name>Braun</name>
    <forename>David</forename>
  </user>
  <user>
    <name>Jordan</name>
    <forename>David</forename>
  </user>
</root>

...必要な結果が生成されます。

<table>
  <tr>
    <td>1</td>
    <td>Michael</td>
  </tr>
  <tr>
    <td>2</td>
    <td>David</td>
  </tr>
</table>
于 2013-05-29T17:15:15.750 に答える