我要删除元素和在元素之后找到的文本。 示例:
<p>life</p>$
在上面的示例中,我要替换
<p> </p>$
带有“”(空)或直接将其删除。 有什么建议吗?
答案 0 :(得分:0)
要从输入XML中删除某些内容,您应该编写一个空白模板 匹配这样的节点。其余的由身份模板复制。
就您的任务而言,我不确定您是否要
删除所有 p
元素。
因此,在示例脚本中,我为p
元素写了一个空模板
与class="xx"
。
要删除紧随其后的文本节点(示例XML中的$
),
您还必须编写一个空模板,匹配这样一个节点:
p
和class="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>