2012-03-09 3 views
0

XMLファイル:XML解析:同じタイプの兄弟を別のセルに分割する方法は?

<books> 
    <scifi key=...> 
     <author>Don Larson</author> 
     <title>The Edge</title> 
     <year>...</year> 
    </scifi> 
    <scifi key=...> 
     <author>Don Larson</author> 
     <author>James Kiddleton</author> 
     <author>Danny Wobers</author> 
     <title>Incognitum</title> 
     <year>1987</year> 
    </scifi> 
    <scifi key=...> 
     <author>....</author> 
     <author>....</author> 
     <title>...</title> 
     <year>...</year> 
    </scifi> 
    etc...................... 
</books> 

XSLファイル:上記の表が表示された場合は

<xsl:template match="/"> 
    <html> 
    <body> 
    <center><h1>SciFi</h1> 
    <table border="1"> 
    <tr> 
     <th>Title</th> 
     <th>Authors</th> 
     <th>Year</th> 
    </tr> 
     <xsl:for-each select="books/scifi"> 
     <xsl:sort select="year"/> 
    <tr> 
     <td><center><xsl:value-of select="title"/></center></td> 
     <td> 
     <xsl:for-each select="author"> 
     <p><xsl:value-of select="."/></p> 
     </xsl:for-each> 
     </td> 
     <td><xsl:value-of select="year"/></td> 
    </tr> 
    </xsl:for-each> 
    </table> 
    </center> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

、タイトルを含む各セルのために、その隣のセルは、そのタイトル

に関連するすべての作家が含まれています

例:今すぐ

Title   Authors  Year 
    (1cell)  (1cell)  (1cell) 
    -----   -------  ---- 
       Don Larson 
Incognitum James Kiddleton 1987 
       Danny Wobers 

ワット

Title   Authors  Year 
    (3cells)  (3cells) (3cells) 
    -----   -------  ---- 
Incognitum  Don Larson  1987 
Incognitum James Kiddleton 1987 
Incognitum  Danny Wobers  1987 

の代わりに1つのセルを有するの:私がやりたい帽子は各タイトルである(複数ある場合。)作者を表示別々のセルに、それに関連して、代わりにこのような何かを得るためでありますタイトルと、そのタイトルに関連する3人の著者をすべて含む1つのセル、私は同じタイトルの3つのセルを持ちたいと思っています。

私はまだyeatによってすべてを並べ替え維持したいと私はまだ私のセルの順序は、(左>右)私はXSLに変更しなければならないのは何Title->ですauthor->年

になりたいですファイル?

答えて

0

あなたは作者ごとに1行をしたいので、

<xsl:for-each select="author"> 
<tr> 
    <td><center><xsl:value-of select="../title"/></center></td> 
    <td> 

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

    </td> 
    <td><xsl:value-of select="../year"/></td> 
</tr> 
    </xsl:for-each> 

<tr> 
    <td><center><xsl:value-of select="title"/></center></td> 
    <td> 
    <xsl:for-each select="author"> 
    <p><xsl:value-of select="."/></p> 
    </xsl:for-each> 
    </td> 
    <td><xsl:value-of select="year"/></td> 
</tr> 

を変更デビッド

+0

あなたの質問を編集してHTMLファイルの断片を追加したのがわかりましたので、あなたが "著者"ボタンをクリックしたときにのみjscript関数を使って提案した変更を適用したいと思います。私は 'setAttribute'などで行っていなければならない変更については少し失われています...それに関する助け? –

+0

私はそのAPIを使用せずに.evaluate(ソースのxpath式を評価するために、プログラムのランダムな行を抽出してコンテキスト外で評価することはできません) –

0

クイックフィックスが

<xsl:template match="/"> 
    <html> 
    <body> 
    <center><h1>SciFi</h1> 
    <table border="1"> 
    <tr> 
     <th>Title</th> 
     <th>Authors</th> 
     <th>Year</th> 
    </tr> 
     <xsl:for-each select="books/scifi"> 
     <xsl:sort select="year"/> 
     <xsl:for-each select="author"> 
    <tr> 
     <td><center><xsl:value-of select="../title"/></center></td> 
     <td> 
     <xsl:for-each select="."> 
     <p><xsl:value-of select="."/></p> 
     </xsl:for-each> 
     </td> 
     <td><xsl:value-of select="../year"/></td> 
    </tr> 
     </xsl:for-each> 
    </xsl:for-each> 
    </table> 
    </center> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

が、私は希望長期的にあります1つのテンプレートから移動することを提案するそれぞれの要素タイプを結果にマッピングするテンプレートを持つストラクチャード・スタイルシートにネストされたfor-eachsですべてを行い、次にapply-templatesを実行します。

+0

答えてくれてありがとうMartin、見てみましょうコメント私はデイビッドを残し、あなたの考えを教えてください:) –

+1

オリジナルのXSLT質問に答えて解決したと思います。もしあなたが助けが必要な場合は、新しい質問をJavascriptで投稿してください。 –

+0

私はあなたの助言に従った。あなたが私にもう少し手助けをしたいと思えば、自由に[見てください](http://stackoverflow.com/questions/9637998/javascript-function-that-modifies-xsl-my-variables-arent-working-properly) )ありがとう! –

関連する問題