2016-10-12 5 views
0

У меня есть следующий DXL (т.е. Lotus Notes XML данных):XSLT преобразование DXL не работает

<?xml version='1.0' encoding="ISO-8859-1"?> 
<document xmlns='http://www.lotus.com/dxl' version='6.5' maintenanceversion='4.0'> 
    <noteinfo> 
     <created><datetime>20020225T160055,64-05</datetime></created> 
    <updatedby><name>CN=John Doe/O=MyOrg</name></updatedby> 
    </noteinfo> 
</document> 

Я пытаюсь преобразовать DXL в HTML с помощью таблицы стилей XSLT, но результирующий HTML не содержит любые элементы данных. Раньше я раньше не работал с данными DXL, и мой XSLT немного ржавый, поэтому я не уверен, в чем проблема.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0"> 
    <xsl:template match="/"> 
     <html> 
      <body> 
       <h2>Submission</h2> 
       <table border="1"> 
         <tr> 
          <td>Create date:</td> 
          <td><xsl:value-of select="document/noteinfo[1]/created[1]/datetime[1]"/></td> 
         </tr> 
         <tr> 
          <td>Updated by:</td> 
          <td><xsl:value-of select="updatedby[1]/name[1]"/></td> 
         </tr>    
       </table> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Какую версию XSLT вы используете? –

+0

Таблица стилей XSLT указывает версию 2.0, поэтому я предположил, что это то, что я использовал. Я использую инструмент OxygenXML, и я настроил его на использование Saxon EE 9.6. – b00kgrrl

+0

Ах да, я только что заметил значение 2.0. –

ответ

1

Ваш источник XML имеет пространство имен по умолчанию, объявленное в нем:

<document xmlns='http://www.lotus.com/dxl' version='6.5' maintenanceversion='4.0'> 

Это означает, что вы должны объявить его и использовать его в XPath в таблице стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:my="http://www.lotus.com/dxl"> 

вы Затем необходимо будет ссылаться на него в XPath в вашем XSLT:

<xsl:value-of select="my:document/my:noteinfo[1]/my:created[1]/my:datetime[1]"/> 

Если вы используете XSLT 2.0, вы можете указать xpath-default-namespace="http://www.lotus.com/dxl" в разделе стилей.

Вот моя попытка, используя объявление пространства имен:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0" xmlns:my="http://www.lotus.com/dxl"> 
    <xsl:template match="/"> 
     <html> 
      <body> 
       <h2>Submission</h2> 
       <table border="1"> 
         <tr> 
          <td>Create date:</td> 
          <td><xsl:value-of select="my:document/my:noteinfo[1]/my:created[1]/my:datetime[1]"/></td> 
         </tr> 
         <tr> 
          <td>Updated by:</td> 
          <td><xsl:value-of select="my:document/my:noteinfo[1]/my:updatedby[1]/my:name[1]"/></td> 
         </tr>    
       </table> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

Вашего XPath для Updated by ячейки неправильно, поэтому я сделал свою собственную коррекцию на то, чтобы получить значение из вашего образца XML.

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