2016-06-21 2 views
0

私はXSLT 1.0を使用しています。私のXMLファイルは、私がテストケースが失敗した場合、それは失敗をプリントアウトし得るが、一度だけテストケースごとにそれを行うにはどうすればよいこのXSLT印刷チェック

<Results> 
    <comment>Test 1</comment> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
    <Action> 
    <Result>Passed/Result> 
    </Action> 

    <comment>Test 2</comment> 
    <Action> 
    <Result>Failed</Result> 
    </Action> 
    <Action> 
    <Result>Failed</Result> 
    </Action> 

    <comment>Test 3</comment> 
    <Action> 
    <Result>Failed</Result> 
    </Action> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
    <Action> 
    <Result>Failed</Result> 
    </Action> 

    <comment>Test 4</comment> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
    <Action> 
    <Result>Passed</Result> 
    </Action>  
</Results> 

ようになります。私はfor-eachを使って毎回失敗した印刷物を手に入れることができました。私がやったやり方は、いくつかのケースでは1トンの失敗を印刷しますが、失敗したと言われる10行以上は見たくありません。私は数と数字を使ってみましたが、実際にうまくいくようなものは考えていませんでした。

私のコードは、HTMLが

<html> 
    <head> 
    </head> 
    <body> 
     <table> 
      <tbody> 
       <tr> 
        <td>Test 1</td> 
       </tr> 
       <tr> 
        <td>Test 2</td> 
       </tr> 
       <tr> 
        <td>Failed</td> 
       </tr> 
       <tr> 
        <td>Test 3</td> 
       </tr> 
       <tr> 
        <td>Failed</td> 
       </tr> 
       <tr> 
        <td>Test 4</td> 
       </tr> 
      </tbody> 
     </table> 
    </body> 
</html> 
のようなものになりますどのように私はそれが

を印刷するのですか
Test 1 
Test 2 
Failed 
Test 3 
Failed 
Test 4 

代わりの

Test 1 
Test 2 
Failed 
Failed 
Test 3 
Failed 
Failed 
Test 4 

<xsl:for-each select="Results"> 
    <xsl:for-each select="Action[Result='Failed']"> 
     <tr title = "binit"> 
      <td bgcolor="#CCCCCC">Failed </td> 
     </tr> 
    </xsl:for-each> 
</xsl:for-each> 

のように見えます

答えて

0

私はあなたのような何かをしたいと思います:

.. ..私はフォーマットを取得するには、ここで質問をフレームに必要

XSLTこのことについて申し訳ありません1.0

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

<xsl:key name="actions" match="Action" use="generate-id(preceding-sibling::comment[1])" /> 

<xsl:template match="/Results"> 
    <table> 
     <xsl:for-each select="comment"> 
      <tr> 
       <td> 
        <xsl:value-of select="."/> 
       </td> 
      </tr> 
      <xsl:if test="key('actions', generate-id())[Result='Failed']"> 
       <tr> 
        <td>Failed</td> 
       </tr> 
      </xsl:if> 
     </xsl:for-each> 
    </table> 
</xsl:template> 

</xsl:stylesheet> 
+0

私は私は私の質問が悪い言葉で表現されたと思います申し訳ありません。私はそれに私の問題を少しはっきりさせるかもしれない情報を加えました。 – Dschmied

+1

私の編集した答えを見てください。これがあなたの質問に答えることができない場合は、**完全な**スタイルシートと予想される出力**をコード**として含む**再現可能な**例を投稿してください。 –

+0

このソリューションを適用しようとすると、最初のFailedが印刷されますが、その後にテストが失敗した場合、そのテストで失敗したものは印刷されません。それらの行に沿ってリセットする方法はありますか? – Dschmied

0

を私は答えがいくつかの醜いxsltになると思うxml入力の構造の問題はそれ自体によく役立たない:あなたはこれらの2つのオプションのいずれかに入力xmlを変更することができます:

<Results> 
    <comment>Test 1</comment> 
    <Actions> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
    <Action> 
    <Result>Passed/Result> 
    </Action> 
    </Actions> 
... 
</Results> 

または

<Results> 
    <Test> 
    <comment>Test 1</comment> 
    <Action> 
     <Result>Passed</Result> 
     </Action> 
     <Action> 
     <Result>Passed/Result> 
     </Action> 
    </Test> 
... 
</Results> 
+0

私は入力xmlを変更することができません。そのため、私は立ち往生しています。 – Dschmied