Nano Hash - криптовалюты, майнинг, программирование

Сумма несвязанных узлов XSLT

Hi SO,

Новичок в XSLT и некоторое время отлаживал этот код.

Текущая переменная всегда возвращает 0

Мне нужно найти сумму всех (X) с одинаковым значением (D) через каждую (строку)

V и W связаны, не знаю, как их "связать"

Пример:

Row (AAA123)[SomeDesc1] = 1.00 + 

Row (BBB456)[SomeDesc1] = 3.00 

SumOfSomeDesc1 = 4.00

только XSLT 1.0

XML:

<Root>
  <Row>
    <ID>AAA123</ID>
    <V>
      <X>1.00</X>
    </V>
    <V>
      <X>2.00</X>
    </V>
    <MultipleFieldsInBetween />
    <W>
      <D>SomeDesc1</D>
    </W>
    <W>
      <D>SomeDesc2</D>
    </W>
  </Row>
  <Row>
    <ID>BBB456</ID>
    <V>
      <X>3.00</X>
    </V>
    <V>
      <X>4.00</X>
    </V>
    <MultipleFieldsInBetween />
    <W>
      <D>SomeDesc1</D>
    </W>
    <W>
      <D>SomeDesc2</D>
    </W>
  </Row>
</Root>

Сумма XSLT (текущая):

<xsl:variable name="SumOfX" select="sum(//Row[ID/text()=$ID]/V[D/text()
=$Description])" />
27.09.2017

  • Как связаны V и W по положению, то есть первый V дочерний элемент Row принадлежит первому W дочернему элементу? 27.09.2017
  • @MartinHonnen Позиция да, V[x] W[x], действительно не знаю, почему это был не один элемент, но я должен использовать его как есть 27.09.2017

Ответы:


1

Я бы решил это как проблему группировки, сначала идентифицируя уникальные описания, затем находя Row по описанию и, наконец, суммируя элементы в одном и том же положении:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

    <xsl:key name="desc-group" match="Row/W/D" use="."/>

    <xsl:variable name="desc-groups" select="//Row/W/D[generate-id() = generate-id(key('desc-group', .)[1])]"/>

    <xsl:key name="row-group" match="Row" use="W/D"/>

    <xsl:template match="/Root">
        <html>
            <body>
                <table>
                    <thead>
                        <tr>
                           <th>Description</th>
                           <th>Sum</th>
                        </tr>
                    </thead>
                    <tbody>
                        <xsl:apply-templates select="$desc-groups"/>
                    </tbody>
                </table>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="Row/W/D">
        <tr>
            <td>
                <xsl:value-of select="."/>
            </td>
            <td>
                <xsl:variable name="pos" select="count(.. | ../preceding-sibling::W)"/>
                <xsl:value-of select="sum(key('row-group', .)/V[position() = $pos]/X)"/>
            </td>
        </tr>
    </xsl:template>
</xsl:stylesheet>

Результат

<html>
   <body>
      <table>
         <thead>
            <tr>
               <th>Description</th>
               <th>Sum</th>
            </tr>
         </thead>
         <tbody>
            <tr>
               <td>SomeDesc1</td>
               <td>4</td>
            </tr>
            <tr>
               <td>SomeDesc2</td>
               <td>6</td>
            </tr>
         </tbody>
      </table>
   </body>
</html>
27.09.2017
  • Я согласен с Мартином. Группировка кажется логичным решением поставленной проблемы. 27.09.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..