Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2024, 17:41   #1
magnuz
Пользователь
 
Регистрация: 07.08.2012
Сообщений: 37
По умолчанию Не удается сделать группировку данных из 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>
Эти файлы имеют примерно такой формат:
Код:
<?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 внутри переменных не видит сиблингов. Или как эту переменную отправить в ключ?
magnuz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос на группировку с условием newfam SQL, базы данных 3 07.06.2023 00:25
Не удается открыть базу данных из-за ошибки чтения ее VBA-проекта. Aleksandr H. Microsoft Office Access 1 01.09.2017 21:49
Раскрыть группировку Slavatron1984 Microsoft Office Excel 5 29.12.2011 17:04
Не удается создание примитивной базы данных Missseeya Microsoft Office Access 1 06.11.2010 21:58
Access – как сделать универсальную Группировку? jiura Microsoft Office Access 3 26.02.2009 22:10