如何使用xslt-1.0在xml中拆分字符串

时间:2011-07-22 04:27:07

标签: xml xslt xpath

这是我想用XSLT转换的HTML的一部分

<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. CIRCUITS ELECTRIQUES
  2. Chahe Nerguizian
  3. 我尝试过使用

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

    但它在php和eclipse的XSLT处理器中都没有返回任何内容。 我怎么能做到这一点?

    提前致谢。

1 个答案:

答案 0 :(得分:2)

正如评论中所提到的,这里没有XHTML,因此没有XML,因此不能在其上使用XSLT。但是.... IF 它被修改为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>