Сначала вы должны узнать о шаблоне идентификации
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
Сам по себе он скопирует все узлы именно из исходного документа.
Это означает, что вместо того, чтобы думать с точки зрения того, что вам нужно копировать, думайте с точки зрения того, что вам не нужно копировать. Это достигается путем добавления шаблонов с более высоким приоритетом, которые переопределяют шаблон идентификации.
Вы не хотите post
элементов, где status
не "ACTIVE"? Просто имейте пустой шаблон, чтобы остановить их копирование.
<xsl:template match="post[status!='ACTIVE']" />
Аналогично, для удаления самого узла status
(для копий, которые он копирует)
<xsl:template match="status" />
Для элементов user
рассмотрите возможность использования xsl:key
для поиска post
элементов
<xsl:key name="posts" match="post" use="user" />
Тогда ваш шаблон для игнорирования пользователей будет таким ...
<xsl:template match="user[key('posts', @id)/status!='ACTIVE']" />
Соберите все это вместе, и вы получите ...
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:key name="posts" match="post" use="user" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="post[status!='ACTIVE']" />
<xsl:template match="status" />
<xsl:template match="user[key('posts', @id)/status!='ACTIVE']" />
</xsl:stylesheet>