Как сделать группировку данных из xml-файлов?
XML - Файл со ссылками на файлы:
<?xml version="2.0" encoding="WINDOWS-1251"?>
<?xml-stylesheet type="text/xsl" href="transform.xsl" ?>
<root>
<file href="pke/06.09.2023 12.20/3104790841_1694010000690.pke" parse="xml" />
<file href="pke/16.09.2022_004/2351869222_1663327805722.pke" parse="xml" />
<file href="pke/06.09.2023 12.20/3104790841_1694017200225.pke" parse="xml" />
...
<file href="pke/16.09.2022_177/1271072836_1663328705812.pke" parse="xml" />
<file href="pke/16.09.2022_177/1271072836_1663859523422.pke" parse="xml" />
</root>
Эти pke-файлы имеют примерно такой формат:
<?xml version="1.0" encoding="UTF-8"?>
<RM3_ПКЭ Ver="1.0" UID="{8c2ead26-c501-43e9-847e-e705da2ca4e9}">
<Param_Check_PKE TimeStart="1663327800148" ... active_cxema="3"/>
<Result_Check_PKE pke_cxema="3" TimeTek="1663328525691" ... sigmaUyC="-72.7261"/>
<Result_Check_PKE pke_cxema="3" TimeTek="1663328528691" ... sigmaUyC="-72.7261"/>
...
</RM3_ПКЭ>
Нужно вытащить из этих файлов и Result_Check_PKE и сгруппировать их по ключу (RM3_ПКЭ@UID + RM3_ПКЭ\Param_Check_PKE@active_cxe ma ) ну или для начала хотя бы по UID. XSL - файл преобразования:
<?xml version="1.0" encoding="WINDOWS-1251"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:variable name="docs" select="document(/root/file/@href)" />
<xsl:key name="uid_scheme_key" match="RM3_ПКЭ" use="@UID"/>
<xsl:template match="/">
<Data>
<xsl:for-each select="$docs">
<xsl:apply-templates />
</xsl:for-each>
</Data>
</xsl:template>
<xsl:template match="RM3_ПКЭ">
<xsl:choose>
<xsl:when test="preceding-sibling::RM3_ПКЭ[@UID=current()/@UID]" />
<xsl:otherwise>
<UID_Data UID="{current()/@UID}" scheme="{current()/Param_Check_PKE/@active_cxema}" ObjName="{current()/Param_Check_PKE/@nameObject}">
<xsl:copy-of select="$docs/RM3_ПКЭ[(@UID=current()/@UID) and (Param_Check_PKE/@active_cxema=current()/Param_Check_PKE/@active_cxema)]/Result_Check_PKE " />
</UID_Data>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Группирует, но не срабатывает защита от повторения. Ибо XPath внутри переменных не видит сиблингов. Как выявить эти предыдущие значения внутри переменной? Или как эту переменную отправить в ключ?