2016-06-28 1 views
0

現在、XSLTを使用しており、属性のサブストリングでノードをグループ化しようとしています。唯一のことは、xsl:キーを使用できない環境で作業していることです。そこにIDの最後の桁のグループの結果を表があるとその値を表示する場所、それがフォーマットすることができるようにキー/ミュンヘンのグループ化なしでXSLT 1.0のfor-each-groupを実行する方法

<RESULTS> <RESULT ID="Result:1-1" Value="32" /> <RESULT ID="Result:1-2" Value="3225" /> <RESULT ID="Result:1-3" Value="372" /> <RESULT ID="Result:1-4" Value="64732" /> <RESULT ID="Test:2-1" Value="6362" /> <RESULT ID="Test:2-2" Value="352" /> <RESULT ID="Test:2-3" Value="325" /> <RESULT ID="Result:3-1" Value="3243" /> <RESULT ID="Result:3-2" Value="2332" /> <RESULT ID="Result:3-3" Value="342" /> <RESULT ID="Result:3-4" Value="2134" /> </RESULTS>

:私のような何かをグループ化して行くための最善の方法を思っていました。たとえば、最初のテーブルにResult:1-1、Test:2-1、Result:3-1をグループ化し、その下にその値をリストします。

期待される結果のいくつかの並べ替えは、次のようになります。

| Table 1 | 
|---------| 
| 32  | 
| 6362 | 
| 3243 | 

| Table 2 | 
|---------| 
| 3225 | 
| 352  | 
| 2332 | 

| Table 3 | 
|---------| 
| 372  | 
| 325  | 
| 342  | 

| Table 4 | 
|---------| 
| 64732 | 
| 2134 | 

使用するグループの特定の方法または特定の函数についての任意の提案をいただければ幸いです! お読みいただきありがとうございました!

+1

"唯一のことは、xsl:keyを使用できない環境で働いていることです。*"この環境は何ですか? 'xsl:key'はXSLT言語の不可欠な部分です。それを使用できない場合は、XSLTを使用していません - あなたの環境で他に何がうまくいかないかを知るにはどうすればいいですか? –

+0

これは、テンプレートに挿入して情報を変換するためにXSLTの一部を読み取る、非常に特殊な環境です。キーはそれがテンプレートの範囲外であることを要求するでしょうが、私はそれを持つことはできません。私はあなたがそれを使用する資格を得るために、あらかじめ定義されたすべての要素を言語で使用しなければならないことに気付きませんでした。 – Ibrennan208

+0

"*私はあなたがそれを使用する資格を得るために言語で定義されたすべての要素を使用しなければならないことを認識していませんでした*" https://www.w3.org/TR/xslt/#conformance –

答えて

1

Muenchianのグループ分けの代替案は、それを説明する同じarticleに記載されています。それはまた、「非常に非効率的」とラベル付けされている。

次のスタイルシート:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/RESULTS"> 
    <html> 
     <xsl:for-each select="RESULT"> 
      <xsl:variable name="key" select="substring(@ID, string-length(@ID))" /> 
      <xsl:if test="not(preceding-sibling::RESULT[substring(@ID, string-length(@ID))=$key])"> 
       <table border="1"> 
        <tr> 
         <th> 
          <xsl:text>Table </xsl:text> 
          <xsl:value-of select="$key"/> 
         </th> 
        </tr> 
        <xsl:for-each select="../RESULT[substring(@ID, string-length(@ID))=$key]"> 
         <tr> 
          <td> 
           <xsl:value-of select="@Value"/> 
          </td> 
         </tr> 
        </xsl:for-each> 
       </table> 
      </xsl:if> 
     </xsl:for-each> 
    </html> 
</xsl:template> 

</xsl:stylesheet> 

あなたの例の入力に適用された場合、(レンダリング)を返します。これはあなたが投稿した結果とは異なることを

enter image description here

注 - しかし、それにもかかわらず、私は正しいと信じています。

+0

ありがとう、ちなみに私は私の "結果"をちょっと乱しました。私はそれが効率的ではないことを知っていますが、私はそれを今のところ効かせる計画です! – Ibrennan208

関連する問題