2012-07-19 28 views
0

我不得不說,XSLT是不是我最好的技能之一:( 我已經讀了很多有關排序節點分成不同的組,我設法不同的問題分成不同的組進行排序,但我現在的問題是,我有相同的對象成組重新排序XSLT - 排序節點分成不同的div

我的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> 

我只是需要一個posibilty對這些問題進行排序裏面「」並將它們放入不同的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); 
} 
?> 

任何想法,這是什麼可能是

回答

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,但是對於這種情況可能不必要的複雜。

+0

感謝您的回覆快:)我會盡力實現這一點。 – KddC 2012-07-19 19:29:00

+0

嘿,我嘗試了簡單的版本,你的如果以正確的方式先行先試,但已經這樣行不通。我編輯我的第一篇文章,以顯示我做了什麼:)任何想法,這可能是什麼問題? 任何想法,這是什麼可能是什麼? – KddC 2012-07-19 19:34:54

+0

@KddC你爲什麼不試試我的代碼?另外「不起作用」幾乎不是我可以採取行動的錯誤描述。 – Tomalak 2012-07-19 21:29:50