2016-06-22 14 views
1

私は今、XSLT 1.0で働いている、と私はcorrectly.My XMLをグループ化する問題を抱えていますが変更することはできません、それは次のようになります。XSLTグループ固有の兄弟

<Analysis> 
    <comment>Test 1</comment> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
    <comment>Start 2nd Phase</comment> 
    <Action> 
    <Result>Failed</Result> 
    </Action> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
    <comment>Test 2</comment> 
    <Action> 
    <Result>Failed</Result> 
    </Action> 
    <Action> 
    <Result>Failed</Result> 
    </Action> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
    <comment>Start 2nd Phase</comment> 
    <Action> 
    <Result>Failed</Result> 
    </Action> 
    <comment>Start 3rd Phase</comment> 
    <Action> 
    <Result>Failed</Result> 
    </Action> 
    <comment>Test 3</comment> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
    <comment>Test 4</comment> 
    <Action> 
    <Result>Failed</Result> 
    </Action> 
    <Action> 
    <Result>Failed</Result> 
    </Action> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
    <comment>Start 2nd Phase</comment> 
    <Action> 
    <Result>Failed</Result> 
    </Action> 
    <Action> 
    <Result>Passed</Result> 
    </Action> 
</Analysis> 

私は現在、印刷されていたコードテストの中で失敗したことが分かったら失敗ですが、それは一度だけ行います。しかし、今は各コメントの下にあります。コメントには「テスト」が含まれているわけではありません。

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

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

「先行兄弟::コメント[1]」を「テスト」で始まるコメントまたは「テスト」を含むコメントにのみ使用する方法はありますか?重要な情報が散在している重要ではないコメントの数が異なります。上記の例と同じように、私は私が現在持っているコードで、私は任意の助けをいただければ幸いです

​​

取得、しかし

Test 1 
Failed 
Test 2 
Failed 
Test 3 
Test 4 
Failed 

ようになり、出力を見てみたいです。

答えて

1

あなたはxsl:keyに直接述語を追加することができるはず...

<xsl:key 
    name="actions" 
    match="Action" 
    use="generate-id(preceding-sibling::comment[starts-with(normalize-space(),'Test')][1])" 
/> 

私もxsl:ifを削除し、xsl:for-eachのテストを置くところ。そうすることで、無視したいコメントの空白行が得られなくなります。完全に働いた

全例...

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:key 
    name="actions" 
    match="Action" 
    use="generate-id(preceding-sibling::comment[starts-with(normalize-space(),'Test')][1])" 
    /> 

    <xsl:template match="/Analysis"> 
    <table> 
     <xsl:for-each select="comment[starts-with(normalize-space(),'Test')]"> 
     <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

関連する問題