xsl:value-of删除XML数据中的HTML标记

时间:2016-01-29 09:09:44

标签: html xml xslt

我创建了包含html标签的xml,如下所示。我尝试根据我的xslt将所有xml数据转换为html。但是,我无法处理xml中包含的html标签。我需要在编写摘要标记时获取任何内容(不丢失html标记)。我该怎么办?

<checklist name="00.07-Parts">
<summary>
  <table border="1" cellpadding="7" cellspacing="0" style="width:100%">
  <tbody>
    <tr>
        <td>
        <p><strong> aaaaaaa </strong></p>
        </td>
        <td>
        <p><strong> bbbbbbbb </strong></p>
        </td>
    </tr>           
  </tbody>
  </table>
</summary>
</checklist>

这里,我的XSLT部分

<xsl:for-each select="checklist">
          <table class="tbChecklist">
            <tbody>
              <tr>
                <td>
                  <h4>
                    <xsl:value-of select="@name"/>
                  </h4>
                </td>
              </tr>
              <tr>
                <td>
                    <xsl:value-of select="summary"/>                                   
                </td>
              </tr>
            </tbody>
          </table>
</xsl:for-each>

结果

  <table class="tbChecklist">
  <tbody>
      <tr>
         <td>
             <h4>00.07-Parts</h4>
         </td>
      </tr>
      <tr>
      <td>
            aaaaaaa
            bbbbbbbb
      <td>
      <tr>
   </tbody>
 </table>

2 个答案:

答案 0 :(得分:2)

你可以简单地使用copy-of而不是value-of。 copy-of为您提供所选节点的全部内容,包括其他节点。

<xsl:copy-of select="summary"/>

答案 1 :(得分:0)

  

我需要在编写摘要标记时获取(不丢失html标记)。

只需使用xsl:copy-of select=" ",就像这样:

<xsl:template match="Customers/checklist">
  <xsl:copy-of select="." />
</xsl:template>

或者,正如上面评论中所提到的,HTML放在CDATA部分(只有在输出为XML时才有用):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" cdata-section-elements="checklist" />
  <xsl:template match="Customers/checklist">
    <xsl:copy-of select="." />
  </xsl:template>
</xsl:stylesheet>

将以下结果输出为XML:

<checklist name="00.07-Parts"><![CDATA[
]]><summary>
  <table border="1" cellpadding="7" cellspacing="0" style="width:100%">
  <tbody>
    <tr>
        <td>
        <p><strong> aaaaaaa </strong></p>
        </td>
        <td>
        <p><strong> bbbbbbbb </strong></p>
        </td>
    </tr>           
  </tbody>
  </table>
</summary><![CDATA[
]]></checklist>

或者,作为第三种方式,只复制summary-tag的所有非空文本()子节点:

<xsl:template match="Customers/checklist">
    <xsl:copy-of select="descendant::text()[normalize-space(.) != '']" />
</xsl:template>