У меня есть XML-код с атрибутом слоя в некоторых узлах.Я хочу скопировать весь XML-контент, но без узлов (со всеми его потомками), у которых слой больше, чем параметр layer.
В приведенном ниже примере параметр layer получает значение 2, и я ожидаю, что все элементы, имеющиеАтрибут уровня 3 и его потомки не должны копироваться в новый XML.
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:param name="layer" select="2"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@layer">
<xsl:if test="current() <= $layer">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Входной XML:
<condition>
<caseCond>Yes</caseCond>
<inform layer="1">
<para>layer 1 information</para>
</inform>
<procContent>
<inform layer="2">
<para>layer 2 information</para>
</inform>
<comment layer="2">
<para>layer 2 information</para>
<para layer="3">layer 3 information</para>
</comment>
</procContent>
<endOfProc/>
</condition>
Ожидаемый результат:
<condition>
<caseCond>Yes</caseCond>
<inform layer="1">
<para>layer 1 information</para>
</inform>
<procContent>
<inform layer="2">
<para>layer 2 information</para>
</inform>
<comment layer="2">
<para>layer 2 information</para>
</comment>
</procContent>
<endOfProc/>
</condition>
Текущий результат:
<?xml version="1.0" encoding="UTF-8"?>
<condition>
<caseCond>Yes</caseCond>
<inform layer="1">
<para>layer 1 information</para>
</inform>
<procContent>
<inform>
<para>layer 2 information</para>
</inform>
<comment>
<para>layer 2 information</para>
<para>layer 3 information</para>
</comment>
</procContent>
<endOfProc/>
</condition>
SO, только layer = "1" выражение существует в теге inform , но layer = "2" выражение удалено из всех содержащих тегов,
И самое важное, строка <para layer="3">layer 3 information</para>
все еще существует.
, хотя я хочу, чтобы все теги с атрибутом layer = 3 и его потомки не отображались.