Как разделить строку с <br>в xml, используя xslt-1.0 - PullRequest
0 голосов
/ 22 июля 2011

Это часть HTML, которую я хотел бы преобразовать с помощью XSLT

<tr>
<td>ELE1600A  </td>
<td>CIRCUITS ELECTRIQUES                         <br>Chahe Nerguizian                                  </td>
<td><center>01&nbsp;</center></td>
<td><center>01&nbsp;</center></td>
<td><center>03</center></td>
</tr>

Я бы хотел разделить следующее

<td>CIRCUITS ELECTRIQUES                         <br>Chahe Nerguizian                                  </td> 

в:

  1. ЭЛЕКТРИЧЕСКИЕ СХЕМЫ
  2. Чахе Нергуизян

Я пытался использовать

<xsl:valuf-of select="substring-before(td[2],'&#xA;')"/>
<xsl:valuf-of select="substring-after(td[2],'&#xA;')"/>

но он ничего не возвращает мне в XSLT-процессоре php и eclipse. Есть ли какие-нибудь проблемы с тем, как мне этого добиться?

Заранее спасибо.

1 Ответ

2 голосов
/ 22 июля 2011

Как уже упоминалось в комментариях, у вас нет XHTML здесь, и, следовательно, нет XML, и поэтому XSLT не может использоваться на нем. Однако .... ЕСЛИ он был изменен на XML, вы могли бы что-то с этим сделать.

Представьте, что это был начальный документ, который правильно сформирован:

<tr>
    <td>ELE1600A </td>
    <td>CIRCUITS ELECTRIQUES<br />Chahe Nerguizian 
    </td>
    <td>
        <center>01 </center>
    </td>
    <td>
        <center>01 </center>
    </td>
    <td>
        <center>03</center>
    </td>
</tr>

Затем можно использовать преобразование идентичности с дополнительными соответствующими шаблонами для обработки соответствия элементу td , который имеет br элементов в качестве дочерних элементов.

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

   <xsl:output method="html" />

   <xsl:template match="td[br]">
      <xsl:copy>
         <ol>
            <xsl:apply-templates />
         </ol>
      </xsl:copy>
   </xsl:template>

   <xsl:template match="td[br]/node()">
      <li>
         <xsl:call-template name="IdentityTransform" />
      </li>
   </xsl:template>

   <xsl:template match="td[br]/br">
      <!-- Ignore tag -->
   </xsl:template>

   <xsl:template match="@*|node()">
      <xsl:call-template name="IdentityTransform" />
   </xsl:template>

   <xsl:template name="IdentityTransform">
      <xsl:copy>
         <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
   </xsl:template>

</xsl:stylesheet>

Когда это применяется к входному XML, генерируется следующее:

<tr>
    <td>ELE1600A </td>
    <td>
        <ol>
            <li>CIRCUITS ELECTRIQUES </li>
            <li>Chahe Nerguizian </li>
        </ol>
    </td>
    <td>
        <center>01 </center>
    </td>
    <td>
        <center>01 </center>
    </td>
    <td>
        <center>03</center>
    </td>
</tr>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...