0

xslt は私の最高のスキルの 1 つではないと言わざるを得ません :( ノードをさまざまなグループにソートすることについて多くのことを読み、さまざまな問題をさまざまなグループに分類することができました。同じオブジェクトを再びグループに入れます。

私のxml構造は次のようになります

<issues>
  <issue status="open" type="Bug">
    <fix_versions>6.14.0</fix_versions>
    <title>issue1</title>
    <description>Description</description>
  </issue>
  <issue status="open" type="Feature">
    <fix_versions>6.13.0</fix_versions>
    <title>issue2</title>
    <description>Description</description>
  </issue>
  <issue status="open" type="Improvement">
    <fix_versions>6.14.0</fix_versions>
    <title>issue3</title>
    <description>Description</description>
  </issue>

私が欲しいのは、次のようなhtml構造を持つことです:

<div class="version">
  <a>6.14.0</a>
  <div class="issues">
    <div class="Bugs">
      <a href="">issue1</a>
    </div>
    <div class="Improvements">
      <a href="">issue3</a>
    </div>
  </div>
</div>

<div class="version">
  <a>6.13.0</a>
  <div class="issues">
    <div class="features">
      <a href="">issue2</a>
    </div>
  </div>
</div>

しかし、私が得るのは次のとおりです。

<div class="version">
  <a>6.14.0</a>
  <div class="issues">
    <a href="">issue1</a>
    <a href="">issue3</a>
  </div>
</div>

<div class="version">
  <a>6.13.0</a>
  <div class="issues">
    <a href="">issue2</a>
  </div>
</div>

これはこれまでの私のxsltです:

  <xsl:for-each select="//issue[generate-id(.)=generate-id(key('versions', fix_versions)[1])]">
    <xsl:sort select="fix_versions" order="descending"/> 
    <div class="release">
        <a href="" class="version"><xsl:value-of select="fix_versions"/></a>
        <div class="version" style="display:none;">
        <xsl:for-each select="key('versions', fix_versions)">

            <xsl:if test="@type='Bug'">

              <xsl:value-of select="title"/>

    </xsl:if>

        </xsl:for-each>

        </div>
   </div>
  </xsl:for-each>

「」内の問題をソートして、それらを別のdivに配置する可能性が必要です。私にはそれで十分でしょう。

何か提案はありますか?たくさん試してみましたが、何もうまくいきません:(どうもありがとう

編集2:

xsl 属性と php + xsl のドル記号に問題があります :/ 構造は次のようになります

<?php
function releaseNotes() {
 $xsl = <<<EOB

 <xsl:attribute name="version"><xsl:value-of select="fix_versions"/></xsl:attribute>
 <xsl:value-of select="$version"/>

 EOB;
 $xmldoc = new DOMDocument('1.0', 'utf-8');
 $xmldoc->load($source);
 $xsldoc = DOMDocument::loadXML($xsl);

 $proc = new XSLTProcessor();
 $proc->importStyleSheet($xsldoc);
 return $proc->transformToXML($xmldoc);
}
?>

これは何だろう?

4

1 に答える 1

0

あなたはほとんどそこにいます。シンプルに保つのはどうですか:

<xsl:template match="issues">
  <xsl:for-each select="
    //issue[generate-id(.) = generate-id(key('versions', fix_versions)[1])]
  ">
    <xsl:sort select="fix_versions" order="descending"/> 

    <xsl:variable name="issueGroup" select="key('versions', fix_versions)" />

    <div class="release">
      <a href="" class="version">
        <xsl:value-of select="fix_versions"/>
      </a>
      <div class="issues">
        <div class="Bugs">
          <xsl:apply-templates select="$issueGroup[@type = 'Bug']" />
        </div>
        <div class="Improvements">
          <xsl:apply-templates select="$issueGroup[@type = 'Improvement']" />
        </div>
        <div class="Features">
          <xsl:apply-templates select="$issueGroup[@type = 'Feature']" />
        </div>
      </div>
    </div>
  </xsl:for-each>
</xsl:template>

<xsl:template match="issue">
  <div class="issue_{@type}">
    <a href=""><xsl:value-of select="title" /></a>
    <div><xsl:value-of select="description" /></div>
  </div>
</xsl:template>

もちろん、要素をおよびで<xsl:key>グループ化する別の要素を追加することもできますが、この場合は不必要に複雑になる可能性があります。<issue>fix_versions@type

于 2012-07-19T19:13:27.717 に答える