如何使用<;拆分字符串;br>;在xml中使用xslt-1.0

如何使用<;拆分字符串;br>;在xml中使用xslt-1.0,xml,xslt,xpath,Xml,Xslt,Xpath,这是我想使用XSLT转换的HTML的一部分 <tr> <td>ELE1600A </td> <td>CIRCUITS ELECTRIQUES <br>Chahe Nerguizian </td> <td><center>01&nbsp;</center></td

这是我想使用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>

ELE1600A
电气线路
01
01
03
我想分成以下几部分

<td>CIRCUITS ELECTRIQUES                         <br>Chahe Nerguizian                                  </td> 
电气电路 进入:

  • 电路电气
  • 岔河县
  • 我试过使用

    <xsl:valuf-of select="substring-before(td[2],'&#xA;')"/>
    <xsl:valuf-of select="substring-after(td[2],'&#xA;')"/>
    
    
    
    但它在php和eclipse的XSLT处理器中都不会向我返回任何信息。 我如何才能做到这一点


    提前感谢。

    如评论中所述,此处没有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>
    
    
    ELE1600A
    电路电气
    01
    01
    03
    
    然后,您可以使用标识转换,并使用额外的匹配模板来处理对子元素为brtd元素的匹配

    <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>
    
    
    ELE1600A
    
  • 电路电气
  • 岔河县
  • 01 01 03
    您的输入标记不是XHTML,因此不是XML,因此格式不正确(请参阅unclosed
    br
    )。这种输入永远不会与任何类型的XSLT处理器一起工作。问题也有点不清楚。您需要一个想要的HTML数字列表,但从显示的XSLT片段中,您只是在连接值。您的XML格式不正确。1. <代码>br没有结束标记2。XML没有预定义的实体
    ,他说它是HTML,不是XML<代码>
    在HTML中是相当合法的。然而,这确实使XSLT变得不可能。事实上,我并不是真的想要一个列表,只是把它们放在单独的元素中。谢谢你,你的回答帮助了我很多,即使我的问题不是很清楚,但它与td[br]/node()完美地结合在一起。从表面上看,这就是我使用的:获取电路Chahe-Nerguizian