如何使用XSLT 2.0删除列表末尾的所有空标记?

时间:2017-06-15 07:05:09

标签: html xml xslt xslt-2.0

我有一套段落:

<p>Paragraph 1</p>
<p>Paragraph 2</p>
<p/>
<p>Paragraph 3</p>
<p>Paragraph 4</p>
<p/>
<p>Paragraph 5</p>
<p/>
<p/>
<p/>

我想要的是删除标签集末尾的空段落,但我想保留其他空标签。

<p>Paragraph 1</p>
<p>Paragraph 2</p>
<p/>
<p>Paragraph 3</p>
<p>Paragraph 4</p>
<p/>
<p>Paragraph 5</p>

我找到了this one等答案,解释了如何删除所有空标记(或任何类型的标记,如果有的话),但我不太清楚如何删除最后一组空像这样的列表中的标签。

此时,文档应仅包含<p>个元素。我可以将它们放在任何其他标记中,我使用<html><body>作为父标记。

2 个答案:

答案 0 :(得分:1)

检查此代码:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="yes" indent="yes"/>
  <xsl:strip-space elements="*"/>
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="*[not(@*|*|comment()|processing-instruction()) and normalize-space()='']"/>
</xsl:stylesheet>

答案 1 :(得分:1)

假设您只有p个元素作为兄弟姐妹,那么您可以将<xsl:template match="p[not(node()) and not(following-sibling::p[node()])]"/>与身份转换模板一起使用:

http://xsltransform.net/ehVYZMW/1显示带有

的完整样式表
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

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

    <xsl:template match="p[not(node()) and not(following-sibling::p[node()])]"/>
</xsl:transform>