行变量更改时XSLT添加标题

时间:2014-11-26 00:17:02

标签: xml variables xslt row

我们有一个Python脚本,可生成类似于此的XML输出报告:

<ROOT>
  <results3>
    <ROW **TicketNumber="CHG000000061374"** Env=" " CustomerProject="MCI-Sacramento"     Program="Infrastructure" Summary="INFRA - Bi-Weekly Sac Portal Maintenance - SACPORTAL2"  ImplementorGroup="Database Management" Implementor="Juan "/>
    <ROW **TicketNumber="CHG000000061374"** Env=" " CustomerProject="MCI-Sacramento" Program="Infrastructure" Summary="INFRA - Bi-Weekly Sac Portal Maintenance - SACPORTAL2"  ImplementorGroup="Database Management" Implementor="Malcolm"/>
    <ROW **TicketNumber="CHG000000061374"** Env=" " CustomerProject="MCI-Sacramento" Program="Infrastructure" Summary="INFRA - Bi-Weekly Sac Portal Maintenance - SACPORTAL2" ImplementorGroup="Incident Support-OSSC" Implementor="Amar"/>
    <ROW **TicketNumber="CHG000000061375"** Env=" " CustomerProject="Verizon-KOVR" Program="Operations - SAC" Summary="INFRA - Server decom - see description" ImplementorGroup="Operations - SAC" Implementor="Ralph"/>
    <ROW **TicketNumber="CHG000000061375"** Env=" " CustomerProject="Verizon-KOVR" Program="Operations - SAC" Summary="INFRA - Server decom - see description" ImplementorGroup="Operations - SAC" Implementor="Ralph"/>

然后将XML转换为HTML。

当TicketNumber变量发生更改时,我想添加标题行或添加空白行或更改格式,以便用户可以轻松查看组合在一起的一张票证的所有信息。否则它会完全运行。有没有办法在XSLT中执行此操作?

1 个答案:

答案 0 :(得分:0)

遵循XSLT

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes"/>
  <xsl:template match="results3">
    <table>
      <xsl:apply-templates select="ROW"/>
    </table>
  </xsl:template>
  <xsl:template match="ROW">
    <xsl:if test="@TicketNumber != preceding-sibling::ROW[1]/@TicketNumber">
      <tr>Header</tr>
    </xsl:if>
      <tr>
       <xsl:attribute name="id" select="@TicketNumber"/>
      </tr>
   </xsl:template>
</xsl:stylesheet>

当应用于示例中的调整后的输入时(删除了**)生成输出

<table>
 <tr id="CHG000000061374"></tr>
 <tr id="CHG000000061374"></tr>
 <tr id="CHG000000061374"></tr>
 <tr>Header</tr>
 <tr id="CHG000000061375"></tr>
 <tr id="CHG000000061375"></tr>
</table>

匹配ROW的模板检查当前行的Ticketnumber是否与前一行/前一行的Ticketnumber不同 - @TicketNumber != preceding-sibling::ROW[1]/@TicketNumber - 并在这种情况下添加标题行。