我有xml文件,如下所示
<?xml version="1.0" encoding="utf-8" ?>
<statusfile>
<job>
<name>Test2</name>
<curstatus>SUCCESS</curstatus>
<stablerevision>5752</stablerevision>
<curdate>12/02/2015</curdate>
<prevstatus>FAILURE</prevstatus>
<prevstable>5745</prevstable>
<prevdate>12/01/2015</prevdate>
</job>
<job>
<name>Test3</name>
<curstatus>SUCCESS</curstatus>
<stablerevision>5752</stablerevision>
<curdate>12/02/2015</curdate>
<prevstatus>SUCCESS</prevstatus>
<prevstable>5745</prevstable>
<prevdate>12/01/2015</prevdate>
</job>
</statusfile>
这是我为xsl文件试过的,
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table width="500px" border="1px" style="text-align:left;font-family:consolas">
<tr bgcolor="#2EFEF7">
<td bgcolor="#2EFEF7">
<b>JOB-NAME</b>
</td>
<td bgcolor="#2EFEF7">
<b>CURRENT-STATUS</b>
</td>
<td bgcolor="#2EFEF7">
<b>REVISION</b>
</td>
<td bgcolor="#2EFEF7">
<b>DATE</b>
</td>
<td bgcolor="#2EFEF7">
<b>PREVIOUS-STATUS</b>
</td>
<td bgcolor="#2EFEF7">
<b>REVISION</b>
</td>
<td bgcolor="#2EFEF7">
<b>DATE</b>
</td>
</tr>
<xsl:for-each select="statusfile/job">
<xsl:choose>
<xsl:when test="curstatus and prevstatus != 'SUCCESS'">
<xsl:for-each select="statusfile/job/currentstatus">
<tr bgcolor="#C1E3E8">
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="name"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="curstatus"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="stablerevision"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="curdate"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="prevstatus"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="prevstable"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="prevdate"/>
</td>
</tr>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:for-each select="statusfile/job/currentstatus">
<tr bgcolor="#C1E3E8">
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="name"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="curstatus"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="stablerevision"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="curdate"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="prevstatus"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="prevstable"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="prevdate"/>
</td>
</tr>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
但我只得到表名,而不是完整的输出作业名称及其信息。想到我在这里失踪的东西
请帮帮我, 提前谢谢 格利扬
答案 0 :(得分:1)
这里有几个问题:
<curstatus>
<prevstatus>
,其文本值(内容)与'SUCCESS'不同我会写:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table width="500px" border="1px" style="text-align:left;font-family:consolas">
<tr bgcolor="#2EFEF7">
<td bgcolor="#2EFEF7">
<b>JOB-NAME</b>
</td>
<td bgcolor="#2EFEF7">
<b>CURRENT-STATUS</b>
</td>
<td bgcolor="#2EFEF7">
<b>REVISION</b>
</td>
<td bgcolor="#2EFEF7">
<b>DATE</b>
</td>
<td bgcolor="#2EFEF7">
<b>PREVIOUS-STATUS</b>
</td>
<td bgcolor="#2EFEF7">
<b>REVISION</b>
</td>
<td bgcolor="#2EFEF7">
<b>DATE</b>
</td>
</tr>
<apply-templates select="statusfile/job" />
</table>
</xsl:template>
<xsl:template match="job[curstatus != 'SUCCESS' or prevstatus != 'SUCCESS'">
<tr bgcolor="#C1E3E8">
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="name"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="curstatus"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="stablerevision"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="curdate"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="prevstatus"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="prevstable"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="prevdate"/>
</td>
</tr>
</xsl:template>
<xsl:template match="job[curstatus = 'SUCCESS' and prevstatus = 'SUCCESS'">
<tr bgcolor="#C1E3E8">
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="name"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="curstatus"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="stablerevision"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="curdate"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="prevstatus"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="prevstable"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="prevdate"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
你的问题很模糊,但你的主要问题是<xsl:for-each select="statusfile/job/currentstatus">
- 我无法理解为什么会这样,那里没有名为currentstatus
的元素所以我无法准确确定您需要的输出。
但是,试试这个 - 我刚刚删除了每个<xsl:for-each select="statusfile/job/currentstatus">
,它至少会为每个job
元素生成一个表格行。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table width="500px" border="1px" style="text-align:left;font-family:consolas">
<tr bgcolor="#2EFEF7">
<td bgcolor="#2EFEF7">
<b>JOB-NAME</b>
</td>
<td bgcolor="#2EFEF7">
<b>CURRENT-STATUS</b>
</td>
<td bgcolor="#2EFEF7">
<b>REVISION</b>
</td>
<td bgcolor="#2EFEF7">
<b>DATE</b>
</td>
<td bgcolor="#2EFEF7">
<b>PREVIOUS-STATUS</b>
</td>
<td bgcolor="#2EFEF7">
<b>REVISION</b>
</td>
<td bgcolor="#2EFEF7">
<b>DATE</b>
</td>
</tr>
<xsl:for-each select="statusfile/job">
<xsl:choose>
<xsl:when test="curstatus and prevstatus != 'SUCCESS'">
<tr bgcolor="#C1E3E8">
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="name"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="curstatus"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="stablerevision"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="curdate"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="prevstatus"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="prevstable"/>
</td>
<td style="font-weight:bold" bgcolor="#FF0000">
<xsl:value-of select="prevdate"/>
</td>
</tr>
</xsl:when>
<xsl:otherwise>
<tr bgcolor="#C1E3E8">
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="name"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="curstatus"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="stablerevision"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="curdate"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="prevstatus"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="prevstable"/>
</td>
<td style="font-weight:bold" bgcolor="#2EFE2E">
<xsl:value-of select="prevdate"/>
</td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>