我有以下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定义的红色。我只是无法弄清楚如何去做。
答案 0 :(得分: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
。
答案 1 :(得分: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>