これまで編集してきましたが、私はこれほど長い間、一見簡単な解決法を見つけることに失敗しています。動的に作成された子と兄弟の子を処理する
要素(およびその兄弟)には、HTMLテーブルに表示するさまざまな(動的な)結果が各CDファイルペアごとに1つずつあります。当初、私は各ループを避けることができると思っていましたが(とにかく同じ結果を返すようです)、私は子供たちを参照するにはより良い方法が必要です。下のソースは、私が働いているのと同様の構造です。
たとえば、「cd」や「file」には価格などの要素が多く、情報がないものもあります。
XML
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.test2.xsl"?>
<catalog>
<rock>
<album>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
</cd>
<file>
<store>Apple</store>
<size>3823</size>
</file>
</album>
<album>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
</cd>
<file>
<store>Amazon</store>
<size>2123</size>
</file>
</album>
</rock>
</catalog>
XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#cccccc">
<th style="text-align:left">Title</th>
<th style="text-align:left">Artist</th>
<th style="text-align:left">Store</th>
<th style="text-align:left">Size</th>
</tr>
<xsl:apply-templates/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="album">
<tr>
<xsl:apply-templates select="cd"/>
<xsl:apply-templates select="file"/>
</tr>
</xsl:template>
<xsl:template match="cd">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
<xsl:template match="file">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
</xsl:stylesheet>
結果今
<table border="1">
<tbody>
<tr bgcolor="#cccccc">
<th style="text-align:left">Title</th>
<th style="text-align:left">Artist</th>
<th style="text-align:left">Store</th>
<th style="text-align:left">Size</th>
</tr>
<tr>
<td>
Empire Burlesque
Bob Dylan
</td>
<td>
Apple
3823
</td>
</tr>
<tr>
<td>
Hide your heart
Bonnie Tyler
</td>
<td>
Amazon
2123
</td>
</tr>
</tbody>
</table>
、私は何が起こっているかを見ると思います。私の解釈からは、XSLTファイルの "cd"と "file"テンプレートの下で、select="."
は<td>
のすべての子を返しています。それぞれが<td>
を持つ方法が必要です。私は、 "cd"と "file"テンプレートの中のfor-eachと同様に、それぞれの "cd"と "file"のためのコールテンプレートのようなものを試しました。 <th>
要素も動的に構築する必要があることに注意してください。テスト用に手動で作成されているからです。助言がありますか?
"動的に"より良い定義が必要です。たとえば、テキスト値を持つすべての葉ノードの列が必要だと言うことができます。しかし、どの要素が行を生成するかをハードコーディングしないようにする方法はありません。 –
私は静的ではなく動的に言及しています。 [number of]列は、API呼び出しから返される内容に応じて動的に作成されます。 0個以上の子、この場合は葉があります。葉にはテキストが含まれていてもいなくてもかまいません。異なるノード名が異なる順番で表示されます(それぞれテーブル内に列があります)。 – MasterWill
何が変わるかは言うまでもありません。あなたは私たちにそれが出力テーブルのための構造体を作成するために使用できるように、私たちに教えてください。制約がない場合、タスクは不可能です。 –