0

次の XML ドキュメントと XSL スタイルシートがあり、XSL で見つかった CSS の一部をスタイルシートに適用し、テストの結果が FAIL の場合にそれを適用するように依頼されました。xsl:if を試してみましたが、変更することができなかったようです。何か案は?

コードは次のとおりです。

XML ファイル:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="results.xsl"?>
<request xmlns:xsi="httyp://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="results.xsd">
<authentication password="turkey" partnerid="exam" />

<method name="ListUserTestResults">
    <parameters>
        <user_id>42511</user_id>
        <transcript>4234232</transcript>
        <test_id>231</test_id>
        <test_name>ASP 3.0 Test</test_name>
        <percentage>75</percentage>
        <test_result>PASS</test_result>
        <time>2006-04-19T14:05:11Z</time>
    </parameters>

    <parameters>
        <user_id>42511</user_id>
        <transcript>2356545</transcript>
        <test_id>12</test_id>
        <test_name>PHP 5.0 Test</test_name>
        <percentage>35</percentage>
        <test_result>FAIL</test_result>
        <time>2006-05-17T10:19:45Z</time>
    </parameters>
    </method>
 </request>

XSL スタイルシート:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" version="4.0.1"/>

<xsl:template match="/">

<style type="text/css">
    .FAIL {color:red;}
</style>

<h1>Results from tests:</h1>

<xsl:for-each select="request/method/parameters">
    <h2>
        <xsl:number count="parameters" />
        User <xsl:value-of select="user_id"/>
    </h2>

    <h3>
        <xsl:value-of select="test_name"/>
        (<xsl:value-of select="test_id"/>)
    </h3>

    <dl>
        <dt>Transcript</dt>
        <dd><xsl:value-of select="transcript"/></dd>
        <dt>Percentage</dt>
        <dd><xsl:value-of select="percentage"/>
        <xsl:if
        (<xsl:value-of select="test_result"/>)
        </dd>
        <dt>Date/Time of test</dt>
        <dd><xsl:value-of select="time"/></dd>
    </dl>
        </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>   

test_result 要素は、ブラウザーで読み取るときに、黒のテキストから CSS で定義された赤に変更する必要があります。私はそれを行う方法を理解することはできません。

4

2 に答える 2

1

完全な変換は次のとおりです。

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

 <xsl:template match="/*">
    <style type="text/css">
        .FAIL {color:red;}
    </style>
    <h1>Results from tests:</h1>

    <xsl:apply-templates/>
 </xsl:template>

 <xsl:template match="parameters">
    <h2>
        <xsl:number count="parameters" />
        User <xsl:value-of select="user_id"/>
    </h2>

    <h3>
        <xsl:value-of select="test_name"/>
        (<xsl:value-of select="test_id"/>)
    </h3>

    <dl>
        <dt>Transcript</dt>
        <dd><xsl:value-of select="transcript"/></dd>
        <dt>Percentage</dt>
        <dd>
          <xsl:value-of select="percentage"/>
        </dd>
        <dt>Result</dt>
          <dd>
              <xsl:if test="test_result = 'FAIL'">
               <xsl:attribute name="class">FAIL</xsl:attribute>
              </xsl:if>
              (<xsl:value-of select="test_result"/>)
          </dd>
        <dt>Date/Time of test</dt>
        <dd><xsl:value-of select="time"/></dd>
    </dl>
 </xsl:template>
</xsl:stylesheet>

この変換が提供された XML ドキュメントに適用されると、次のようになります。

<request xmlns:xsi="httyp://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="results.xsd">
<authentication password="turkey" partnerid="exam" />

<method name="ListUserTestResults">
    <parameters>
        <user_id>42511</user_id>
        <transcript>4234232</transcript>
        <test_id>231</test_id>
        <test_name>ASP 3.0 Test</test_name>
        <percentage>75</percentage>
        <test_result>PASS</test_result>
        <time>2006-04-19T14:05:11Z</time>
    </parameters>

    <parameters>
        <user_id>42511</user_id>
        <transcript>2356545</transcript>
        <test_id>12</test_id>
        <test_name>PHP 5.0 Test</test_name>
        <percentage>35</percentage>
        <test_result>FAIL</test_result>
        <time>2006-05-17T10:19:45Z</time>
    </parameters>
    </method>
 </request>

必要な正しい結果が生成されます。

<style type="text/css">
        .FAIL {color:red;}
    </style>
<h1>Results from tests:</h1>
<h2>1
        User 42511</h2>
<h3>ASP 3.0 Test
        (231)
    </h3>
<dl>
   <dt>Transcript</dt>
   <dd>4234232</dd>
   <dt>Percentage</dt>
   <dd>75</dd>
   <dt>Result</dt>
   <dd>
              (PASS)
          </dd>
   <dt>Date/Time of test</dt>
   <dd>2006-04-19T14:05:11Z</dd>
</dl>
<h2>2
        User 42511</h2>
<h3>PHP 5.0 Test
        (12)
    </h3>
<dl>
   <dt>Transcript</dt>
   <dd>2356545</dd>
   <dt>Percentage</dt>
   <dd>35</dd>
   <dt>Result</dt>
   <dd class="FAIL">
              (FAIL)
          </dd>
   <dt>Date/Time of test</dt>
   <dd>2006-05-17T10:19:45Z</dd>
</dl>

説明:

xsl:ifとの適切な使用xsl:attribute

于 2013-01-13T17:30:16.773 に答える
0

<xsl:when>ここで条件チェックが必要です

    <dl>
        <dt>Transcript</dt>
        <dd><xsl:value-of select="transcript"/></dd>
        <dt>Percentage</dt>
        <dd><xsl:value-of select="percentage"/>
          <xsl:choose>
              <xsl:when test="test_result = 'PASS'">
                    <dd><xsl:value-of select="test_result"/></dd>
              </xsl:when>
              <xsl:otherwise>
                <dd style="color: red"><xsl:value-of select="test_result"/></dd>
              </xsl:otherwise>
          </xsl:choose>
        </dd>
        <dt>Date/Time of test</dt>
        <dd><xsl:value-of select="time"/></dd>
    </dl>
于 2013-01-13T14:55:27.370 に答える