Как сделать группировку данных из 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 внутри переменных не видит сиблингов. Как выявить эти предыдущие значения внутри переменной? Или как эту переменную отправить в ключ?


Ответы (0 шт):