如何在封闭元素之后查找文本并将其删除

时间:2018-06-25 05:33:47

标签: xslt

我要删除元素和在元素之后找到的文本。 示例:

 <p>life</p>$

在上面的示例中,我要替换

<p>&nbsp;</p>$ 
     

带有“”(空)或直接将其删除。   有什么建议吗?

1 个答案:

答案 0 :(得分:0)

要从输入XML中删除某些内容,您应该编写一个空白模板 匹配这样的节点。其余的由身份模板复制。

就您的任务而言,我不确定您是否要 删除所有 p元素。 因此,在示例脚本中,我为p元素写了一个空模板 与class="xx"

要删除紧随其后的文本节点(示例XML中的$), 您还必须编写一个空模板,匹配这样一个节点:

  • 文本节点,
  • 具有前面的第一个兄弟姐妹,名称为pclass="xx"

因此脚本如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="p[@class='xx']"/>

  <xsl:template match="text()[preceding-sibling::*[1][self::p[@class='xx']]]"/>

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

对于以下输入,还包括其他一些p元素,但不包含 紧随其后的指定类和文本节点:

<root>
  <h1>Title</h1>
  <p class="xx">life</p>$
  <p>is brutal</p>Xxx
  <p>and full of traps</p>Yyy
</root>

它给出:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <h1>Title</h1>
  <p>is brutal</p>Xxx
  <p>and full of traps</p>Yyy
</root>