2011-01-18 2 views
0

Я хочу изменить это содержание XML в HTML-таблицыДля преобразования XML в HTML в виде таблицы

<SSI> 
     <data> 
      <expanded>Chemical Research</expanded><abbre>Chem. Res.</abbre> 
      <expanded>Materials Journal</expanded><abbre>Mater. J.</abbre> 
      <expanded>Chemical Biology</expanded><abbre>Chem. Biol.</abbre> 
      <expanded>Symposium Series</expanded><abbre>Symp. Ser.</abbre> 
      <expanded>Biochimica Polonica</expanded><abbre>Biochim. Pol.</abbre> 
      <expanded>Chemica Scandinavica</expanded><abbre>Chem. Scand.</abbre> 
     <\data> 
     <data> 
      <expanded>Botany</expanded><abbre>Bot.</abbre> 
      <expanded>Chemical Engineering</expanded><abbre>Chem. Eng.</abbre> 
      <expanded>Chemistry</expanded><abbre>Chem.</abbre> 
      <expanded>Earth Sciences</expanded><abbre>Earth Sci.</abbre> 
      <expanded>Microbiology</expanded><abbre>Microbiol.</abbre> 
     <\data> 
    <\SSI> 

Пробовал с последующим XSL

 <?xml version="1.0"?> 
     <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
     <xsl:template match="/"> 
     <html> 
     <head><title>Abbreviate</title></head> 
     <body> 
     <table border="1"> 
     <tr> 
     <th>Expanded</th> 
     <th>Abbre</th> 
     </tr> 
     <xsl:for-each select="SSI/data"> 
     <tr> 
     <td><xsl:value-of select="expanded"/></td> 
     <td><xsl:value-of select="abbre"/></td> 
     </tr> 
     </xsl:for-each> 
     </table> 
     </body></html> 
     </xsl:template> 
     </xsl:stylesheet> 

я получил только первую запись тега данных в HTML Формат таблицы

Expanded    Abbre 
    -----------   -------------------- 
    Chemical Research  Chem. Res 
    Botany    Bot. 

Как получить все значения в HTMl ???

+0

Используйте код для форматирования кода ({} -button, чтобы отформатировать исходный код, чтобы мы могли видеть его правильно! – lweller

+0

Являются ли ваши закрывающие теги неправильным способом в исходном коде или это просто ошибка копирования? (Т.е. ' <\data> 'вместо правильного' ') – biziclop

+0

Я не знаю, является ли это копией и вставкой XML, но вы получили \ (BACKslahes) в ваших закрывающих данных и тегах SSI ... –

ответ

2

Если вы очистите свой XSLT и используете xsl:apply-templates, а не xsl:for-each, жизнь станет проще. Практически никогда не было причины использовать xsl:for-each. Попробуйте следующее:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="/"> 
     <html> 
      <head><title>Abbreviate</title></head> 
      <body> 
       <table border="1"> 
        <tr> 
         <th>Expanded</th> 
         <th>Abbre</th> 
        </tr> 
        <xsl:apply-templates select='SSI/data/expanded'/> 
       </table> 
      </body></html> 
    </xsl:template> 

    <xsl:template match="expanded"> 
     <tr> 
      <td><xsl:apply-templates/></td> 
      <xsl:apply-templates select='following-sibling::abbre[1]'/> 
     </tr> 
    </xsl:template> 

    <xsl:template match="abbre"> 
     <td><xsl:apply-templates/></td> 
    </xsl:template> 

</xsl:stylesheet> 

Используя небольшие шаблоны, которые применяются, вы упрощаете свою таблицу стилей. Кроме того, нет реальной причины использовать xsl:value-of здесь - встроенные шаблоны сделают все правильно. Вы получите более простые шаблоны, которые легче понять.

+0

+1 Лучше ответ. имя 'abbre', как' makeCell', и называть его правилом соответствия 'expand', или даже сделать это« any el ement в режиме 'makeCell' mode и применять шаблон к себе и следуя правилу соответствия. –

+0

@ Alejandro - да, подумал о чем-то подобном и пошел на самый простой подход, который мог бы использовать только «xsl: apply-templates» –

+0

Thanks Nic. Я получил ожидаемый результат. – Tiger

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