2015-12-03 4 views
0

У меня есть XML-файл, как показано нижеXML в XSL файл

<?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

Что такое '' for? Во-первых, в вашем XML нет элемента currentstatus, и если вы имеете в виду 'curstatus', то в каждом' задании 'есть только один из них. –

+0

Ваш '' будет проверять, существует ли элемент 'curstatus' и что' prevstatus' существует и не имеет значения '' SUCCESS'', но я подозреваю, что это не то, что предназначено. Вы пытаетесь проверить, нет ли у элемента «УСПЕХА»? – Flynn1179

ответ

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> 
1

Несколько вопросов здесь: "! Curstatus и prevstatus = 'УСПЕХ'"

  • тест succedes, если оба из следующих истинны
    • существует элемент <curstatus> под током узел
    • существует элемент <prevstatus> ниже текущего узла с текстовым значением (содержанием), отличным от «УСПЕХА»
  • Я предполагаю, что вы после являются элементами, где либо curstatus или prevstatus не являются «УСПЕХ»
  • вложенный в-каждый ищет элементов по отношению к текущему элементу, который/statusfile/работа, таким образом, это соответствует только /statusfile/job/statusfile/job/currentstatus, что, вероятно, не является тем, что вы хотите
  • Я бы переписал это, чтобы использовать отдельный шаблон для элемента job (более «xslt-like»)

Я хотел бы написать:

<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> 
Смежные вопросы