<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0" xmlns:mn="http://vsystems.com/WS/StockAdjustments">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes" />
<xsl:template match="mn:StockAdjustments">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="mn:StockAdjustment[@Status = ''][1]">
<xsl:copy>
<xsl:if test="@Article">
<xsl:attribute name="Article">
<xsl:value-of select="@Article"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@Client">
<xsl:attribute name="Client">
<xsl:value-of select="@Client"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@Status">
<xsl:attribute name="Status">
<xsl:value-of select="@Status"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@Unit">
<xsl:attribute name="Unit">
<xsl:value-of select="@Unit"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@Status = ''">
<xsl:attribute name="Quantity">
<xsl:value-of select="sum(//mn:StockAdjustment[@Status = '']/@Quantity)"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@ReasonCode">
<xsl:attribute name="ReasonCode">
<xsl:value-of select="@ReasonCode"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@Batch">
<xsl:attribute name="Batch">
<xsl:value-of select="@Batch"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@HostLocation">
<xsl:attribute name="HostLocation">
<xsl:value-of select="@HostLocation"/>
</xsl:attribute>
</xsl:if>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="mn:StockAdjustment[@Status = 'QUARANTAINE'][1]">
<xsl:copy>
<xsl:if test="@Article">
<xsl:attribute name="Article">
<xsl:value-of select="@Article"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@Client">
<xsl:attribute name="Client">
<xsl:value-of select="@Client"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@Status">
<xsl:attribute name="Status">
<xsl:value-of select="@Status"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@Unit">
<xsl:attribute name="Unit">
<xsl:value-of select="@Unit"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@Status = 'QUARANTAINE'">
<xsl:attribute name="Quantity">
<xsl:value-of select="sum(//mn:StockAdjustment[@Status = 'QUARANTAINE']/@Quantity)"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@ReasonCode">
<xsl:attribute name="ReasonCode">
<xsl:value-of select="@ReasonCode"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@Batch">
<xsl:attribute name="Batch">
<xsl:value-of select="@Batch"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@HostLocation">
<xsl:attribute name="HostLocation">
<xsl:value-of select="@HostLocation"/>
</xsl:attribute>
</xsl:if>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
please check if it is suitable for you.
use Storable qw(dclone);
$group2 = dclone(\%group);
Из документации Storable :: dclone я нашел Clone :
my $copy = clone (\@array);
# or
my %copy = %{ clone (\%hash) };
Не нуждается в гибкости и утверждает, что он быстрее, чем Storable :: dclone .
Глубокая структура данных 101:
dclone
, чтобы сделать глубокую копию структуры, и freeze
и thaw
чтобы сериализовать / десериализовать их для хранения (скажем, в базе данных или в файле cookie http (но вам следует зашифровать все, что вы отправляете пользователю, чтобы его было сложнее подделать). Всегда мог сохранить хеш через Storable или Data :: Dumper и переназначить сохраненное значение в новый хеш. Это должно получить полную копию без ведения ссылочных ссылок.
use Storable;
my $serialized = freeze \%config;
my %newconfig = %{ thaw($serialized) };