XSLT:将空节点保留在上级节点中

时间:2015-03-05 09:53:50

标签: xml xslt

我在节点中有文本,其中包含类似html的回车<br/>。我想在XSLT转换中保留这些空节点,但我没有成功。

以下是XML输入示例:

<?xml version="1.0"?>
<eventlist>
  <event>
     <summary>Meeting Harry</summary>
     <description>Talk for Mistex Project<br/>Invite Spec</description>
  </event>
  <event>
    <summary>Shopping with Lance</summary>
    <description>Need Christmas Gift<br/>Joint Lunch<br/>Check for car</description>
  </event>
</eventlist>

请注意<br/> - 节点之间的<description>。在转换为html时,我想保留<br/>,结果应该是

 <?xml version="1.0" encoding="iso-8859-1"?>
 <table>
    <tbody>
       <tr>
          <td>Meeting Harry</td>
          <td>Talk for Mistex Project<br/>Invite Spec</td>
       </tr>
       <tr>
          <td>Shopping with Lance</td>
          <td>Need Christmas Gift<br/>Joint Lunch<br/>Check for car</td>
       </tr>
    </tbody>
 </table>

但是使用以下非常简单的XSLT            

  <!-- ******************************** -->
  <xsl:template match="/">
    <table>
      <tbody>
        <xsl:apply-templates select="eventlist/event"/>
      </tbody>
    </table>
  </xsl:template>
  <!-- ******************************** -->
  <xsl:template match="event">
    <tr>
      <td>
        <xsl:value-of select="summary"/>
      </td>
      <td>
        <xsl:apply-templates select="description"/>
      </td>
    </tr>
  </xsl:template>
  <!-- ******************************** -->
  <xsl:template match="description">
    <xsl:value-of select="."/>
    <xsl:apply-templates select="br"/>
  </xsl:template>
  <!-- ******************************** -->
  <xsl:template match="br">
    <br/>
  </xsl:template>
  <!-- ******************************** -->

</xsl:stylesheet>

我得到一些奇怪的东西,如

 <?xml version="1.0" encoding="iso-8859-1"?>
 <table>
    <tbody>
       <tr>
          <td>Meeting Harry</td>
          <td>Talk for Mistex ProjectInvite Spec<br/>
          </td>
       </tr>
       <tr>
          <td>Shopping with Lance</td>
          <td>Need Christmas GiftJoint LunchCheck for car<br/>
             <br/>
          </td>
       </tr>
    </tbody>
 </table>

回车在说明末尾放错了位置。 <xsl:value-of select="."/>只是省略了中间节点,这是可以预期的。我只是没有解决方案,也许有一个简单的解决方案?我没有把<br/>放在正确的地方。我做错了什么???

1 个答案:

答案 0 :(得分:1)

为什么不在描述匹配中应用模板而不是使用value-of,则不需要。

<xsl:template match="description">
    <!--<xsl:value-of select="."/>-->
    <xsl:apply-templates/>
</xsl:template>

结果:

<table>
    <tbody>
        <tr>
            <td>Meeting Harry</td>
            <td>Talk for Mistex Project<br/>Invite Spec</td>
        </tr>
        <tr>
            <td>Shopping with Lance</td>
            <td>Need Christmas Gift<br/>Joint Lunch<br/>Check for car</td>
        </tr>
    </tbody>
</table>