2016-05-07 3 views
0

Я пытаюсь использовать простое преобразование Saxon XSLT 2.0 (используя XML-редактор Exchanger) для генерации HTML-файла из XML и XSL-документа, но данные из XML-файла не получают подобрал. Я предполагаю, что у меня есть ошибки в моей таблице стилей XSL, но я не уверен, где.Преобразование XSLT 2.0 не генерирует надлежащий html-документ

Я загрузил все 4 файла (1 XSL, 1 XML, CSS 1 и 1 PNG), которые необходимы для создания полного HTML документ здесь ... https://drive.google.com/open?id=0B9o30hEqwvyDSjRsbWlZVUpyNzA

Вот мой XSL таблицы стилей (которые такой же, как тот, включенный в приведенной выше ссылке) ...

<?xml version="1.0" encoding="UTF-8" ?> 


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

    <xsl:output method="html" 
     doctype-system="about:legacy-compat" 
     encoding="UTF-8" 
     indent="yes" /> 

    <xsl:template match="/"> 
     <html> 
     <head> 
      <title>Employment Report</title> 
      <link href="horizons.css" rel="stylesheet" type="text/css" /> 
     </head> 

     <body> 
      <div id="wrap"> 
       <header> 
        <img src="horizons.png" alt="Horizons TechNet" /> 
       </header> 

       <h1>Employment Report</h1> 
       <xsl:for-each-group select="employee" group-by="gender"> 

        <table id="summary"> 
         <tr> 
          <th>Gender</th> 
          <td> 
           <xsl:value-of select="current-grouping-key()" /> 
          </td> 
         </tr> 
         <tr> 
          <th>Employees</th> 
          <td> 
           <xsl:value-of select="count(current-group())" /> 
          </td> 
         </tr> 
         <tr> 
          <th>Average Compensation</th> 
          <td> 
           <xsl:value-of select="avg(current-group()//salary+bonus+commission)"/> 
          </td> 
         </tr> 
        </table> 


        <table id="emptable"> 
         <tr> 
          <th>ID</th> 
          <th>Department</th> 
          <th>Education Level</th> 
          <th>Total Compensation</th> 
         </tr> 

        <xsl:apply-templates select="employee"> 
         <xsl:sort select="sum(salary+bonus+commission)" order="descending" data-type="number" /> 
        </xsl:apply-templates> 

        </table> 

       </xsl:for-each-group> 

      </div> 
     </body> 

     </html> 
    </xsl:template> 

<xsl:template name="employee"> 
    <tr> 
     <td><xsl:value-of select="@empID" /></td> 
     <td><xsl:value-of select="department" /></td> 
     <td><xsl:value-of select="title" /></td> 
     <td><xsl:value-of select="edLevel" /></td> 
     <td><xsl:value-of select="sum(salary+bonus+commission)" /></td> 
    </tr> 
</xsl:template> 


</xsl:stylesheet> 

ответ

1

Использование <xsl:for-each-group select="//employee" group-by="gender">, для начала. И я предполагаю, что вы хотите <xsl:apply-templates select="current-group()"> вместо <xsl:apply-templates select="employee">

Кроме того у вас есть name вместо атрибута на последнем шаблоне match и в некоторых местах вы используете + и затем sum, я думаю, вы либо хотите просуммировать элементы с помощью sum или + но не оба:

<?xml version="1.0" encoding="UTF-8" ?> 



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

    <xsl:output method="html" 
     doctype-system="about:legacy-compat" 
     encoding="UTF-8" 
     indent="yes" /> 

    <xsl:template match="/"> 
     <html> 
      <head> 
       <title>Employment Report</title> 
       <link href="horizons.css" rel="stylesheet" type="text/css" /> 
      </head> 

      <body> 
       <div id="wrap"> 
        <header> 
         <img src="horizons.png" alt="Horizons TechNet" /> 
        </header> 

        <h1>Employment Report</h1> 
        <xsl:for-each-group select="//employee" group-by="gender"> 

         <table id="summary"> 
          <tr> 
           <th>Gender</th> 
           <td> 
            <xsl:value-of select="current-grouping-key()" /> 
           </td> 
          </tr> 
          <tr> 
           <th>Employees</th> 
           <td> 
            <xsl:value-of select="count(current-group())" /> 
           </td> 
          </tr> 
          <tr> 
           <th>Average Compensation</th> 
           <td> 
            <xsl:value-of select="avg(current-group()/sum(salary | bonus |commission))"/> 
           </td> 
          </tr> 
         </table> 


         <table id="emptable"> 
          <tr> 
           <th>ID</th> 
           <th>Department</th> 
           <th>Education Level</th> 
           <th>Total Compensation</th> 
          </tr> 

          <xsl:apply-templates select="current-group()"> 
           <xsl:sort select="sum(salary | bonus | commission)" order="descending"/> 
          </xsl:apply-templates> 

         </table> 

        </xsl:for-each-group> 

       </div> 
      </body> 

     </html> 
    </xsl:template> 

    <xsl:template match="employee"> 
     <tr> 
      <td><xsl:value-of select="@empID" /></td> 
      <td><xsl:value-of select="department" /></td> 
      <td><xsl:value-of select="title" /></td> 
      <td><xsl:value-of select="edLevel" /></td> 
      <td><xsl:value-of select="sum(salary | bonus | commission)" /></td> 
     </tr> 
    </xsl:template> 


</xsl:stylesheet> 
+0

Это немного помогло, спасибо. Большая часть документа пока не отображается. – codeRed

+0

отображает всю информацию в xml, но не отформатирован в html. Также это была ВСЕ информация о каждом сотруднике, а не о выбранном, который xsl пытается извлечь. – codeRed

+0

@codeRed, я сделал несколько исправлений и разместил полную таблицу стилей, так как теперь я на своем рабочем столе и больше не размещаю свой мобильный телефон. –

 Смежные вопросы

  • Нет связанных вопросов^_^