Чтобы удалить что-то из входного 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>