Arhn - архитектура программирования

Группировка XSL не дает никакого результата

Я хочу сгруппировать по «ноль: PosNo». Если я удалю групповые команды, он вернет результат, но, очевидно, он вернет это:

INSERT INTO RAPP_ADM.MTO_POS_IMP_TAB (PROJECT_NO, MTO_OWNER_NO, POS_NO, PART_NO, DESCRIPTION, QTY, UNIT, TOT_LEN, TOT_WEIGHT, DRAWING, GRADE, TRACE, BI_PRODUCT, SURFACE, CALC, DISCIPLINE, MADE_BY, POS_NO2, PLT_SEQ, OBJECT_SQ, OBJECT_REVISION) 
VALUES ('6111', '26-0008-R552-MOD-01-M', '1','PIP03D1160', 'PIPE sch.160 ASTM A790 UNS S31', 2.000, 'M', 2.000, 42.700, 'C097-RWP-L-XN-0057-01', 'sch.160 ASTM A790 UNS S31', 'N', '26-0008-R552-MOD-01-1', 0.559, 'N', 'L', 'sindre.thompson', '', 721, '1556750', '1');

INSERT INTO RAPP_ADM.MTO_POS_IMP_TAB (PROJECT_NO, MTO_OWNER_NO, POS_NO, PART_NO, DESCRIPTION, QTY, UNIT, TOT_LEN, TOT_WEIGHT, DRAWING, GRADE, TRACE, BI_PRODUCT, SURFACE, CALC, DISCIPLINE, MADE_BY, POS_NO2, PLT_SEQ, OBJECT_SQ, OBJECT_REVISION) VALUES 
('6111', '26-0008-R552-MOD-01-M', '1','PIP03D1160', 'PIPE sch.160 ASTM A790 UNS S31', 0.660, 'M', 0.660, 14.093, 'C097-RWP-L-XN-0057-01', 'sch.160 ASTM A790 UNS S31', 'N', '26-0008-R552-MOD-01-1', 0.184, 'N', 'L', 'sindre.thompson', '', 721, '1556750', '1');

xmlns:zero="rosenbergverft.com:3D/2011/Zero"

   <xsl:output method="text" omit-xml-declaration="yes" standalone="no" media-type="text/plain"/>
   <xsl:template match="/">
 
<xsl:for-each select="/zero:Zero/zero:MTOOwner/zero:DocumentNo/zero:BiProduct/zero:Part">
<xsl:for-each-group select="/" group-by="zero:POS_NO">
<xsl:sort select="zero:PosNo" />
INSERT INTO RAPP_ADM.MTO_POS_IMP_TAB (PROJECT_NO, MTO_OWNER_NO, POS_NO, PART_NO, DESCRIPTION, QTY, UNIT, TOT_LEN, TOT_WEIGHT, DRAWING, GRADE, TRACE, BI_PRODUCT, SURFACE, CALC, DISCIPLINE, MADE_BY, POS_NO2, PLT_SEQ, OBJECT_SQ, OBJECT_REVISION) VALUES ('
<xsl:value-of select="../../../../pdms:PDMSProject/pdms:ProjectNumber/@text" />', 
'<xsl:value-of select="zero:MtoOwnerNo" />', 
'<xsl:value-of select="zero:PosNo" />',
'<xsl:value-of select="zero:StockNo" />', 
'<xsl:value-of select="zero:Description" />', 
<xsl:choose>
  <xsl:when test="zero:Quantity/@unit = 'mm2'"><xsl:value-of select="format-number(zero:Quantity/@number div 1000000, '#0.000')"/><xsl:text>, 'M2'</xsl:text></xsl:when>
  <xsl:when test="zero:Quantity/@unit = 'mm'"><xsl:value-of select="format-number(zero:Quantity/@number div 1000, '#0.000')"/><xsl:text>, 'M'</xsl:text></xsl:when>
  <xsl:when test="zero:Quantity/@unit = 'pcs'"><xsl:value-of select="format-number(zero:Quantity/@number, '#0')"/><xsl:text>, 'EA'</xsl:text></xsl:when>
  <xsl:otherwise><xsl:value-of select="format-number(zero:Quantity/@number, '#0.000')"/><xsl:text>, ''</xsl:text></xsl:otherwise>
</xsl:choose>, 
<xsl:value-of select="format-number(zero:TotalLength/@number div 1000, '#0.000')" />, 
<xsl:value-of select="zero:TotalWeight/@number" />, 
'<xsl:value-of select="zero:DocumentNo" />', '<xsl:value-of select="zero:Grade" />', 
<xsl:choose>
  <xsl:when test="zero:Traceable/@boolean = 'false'"><xsl:text>'N'</xsl:text></xsl:when>
  <xsl:otherwise><xsl:text>'Y'</xsl:text></xsl:otherwise>
  </xsl:choose>, 
  '<xsl:value-of select="zero:BiProduct" />', 
  <xsl:value-of select="format-number(zero:Surface/@number div 1000000, '#0.000')" />, 
  '<xsl:value-of select="zero:Calc" />', '<xsl:value-of select="zero:Discipline" />', 
  '<xsl:value-of select="zero:Designer" />', '<xsl:value-of select="zero:Name" />',
  <xsl:value-of select="../../../zero:PlantSeq/@number" />, '<xsl:value-of select="../../../zero:ObjectSeq/@number" />',
  '<xsl:value-of select="../../../zero:ObjectRev" />');
  </xsl:for-each-group>
  </xsl:for-each>

Вот чего я хочу добиться: я хочу, чтобы числа для PosNo 1 суммировались, чтобы он возвращал только одну вставку для PosNo 1, а не две. То же для Посно 2, 3 и т.д.

INSERT INTO RAPP_ADM.MTO_POS_IMP_TAB (PROJECT_NO, MTO_OWNER_NO, POS_NO, PART_NO, DESCRIPTION, QTY, UNIT, TOT_LEN, TOT_WEIGHT, DRAWING, GRADE, TRACE, BI_PRODUCT, SURFACE, CALC, DISCIPLINE, MADE_BY, POS_NO2, PLT_SEQ, OBJECT_SQ, OBJECT_REVISION) VALUES 
('6111', '26-0008-R552-MOD-01-M', '1','PIP03D1160', 'PIPE sch.160 ASTM A790 UNS S31', 2.66, 'M', 2.66, 56.793, 'C097-RWP-L-XN-0057-01', 'sch.160 ASTM A790 UNS S31', 'N', '26-0008-R552-MOD-01-1', 0.559, 'N', 'L', 'sindre.thompson', '', 721, '1556750', '1');
 

Я не могу понять, что я делаю неправильно. Делаю ли я очевидные ошибки?

17.09.2019

  • Опубликуйте воспроизводимый пример, включая входные данные, полную таблицу стилей XSLT и ожидаемый результат — см.: минимальный воспроизводимый пример. 17.09.2019
  • Если я удаляю групповые команды, возвращается результат. Вы уверены, что ваш процессор поддерживает XSLT 2.0? 17.09.2019

Ответы:


1

Я думаю, вместо

<xsl:for-each select="/zero:Zero/zero:MTOOwner/zero:DocumentNo/zero:BiProduct/zero:Part">
<xsl:for-each-group select="/" group-by="zero:POS_NO">
<xsl:sort select="zero:PosNo" />

ты хочешь

<xsl:for-each-group select="/zero:Zero/zero:MTOOwner/zero:DocumentNo/zero:BiProduct/zero:Part" group-by="zero:POS_NO">
  <xsl:sort select="current-grouping-key()" />

Но это предположение, покажите нам свою структуру ввода и желаемую структуру результата.

17.09.2019
  • Я пробовал это, но он все равно ничего не возвращает. Я улучшил свой пост с лучшим объяснением того, чего я пытаюсь достичь 17.09.2019
  • @SindreThompson, пожалуйста, покажите соответствующую структуру ввода XML. 17.09.2019

  • 2
    <xsl:for-each-group select="/">
    

    должно быть неправильным, потому что "/" выбирает один узел, а группировка одного узла никогда не бывает полезной.

    Но, не видя входной XML, трудно сказать, что нужно было написать вместо него.

    17.09.2019
  • Я согласен с тем, что в большинстве контекстов <xsl:for-each-group select="/" group-by="zero:POS_NO"> не имеет смысла, так как основной входной корневой узел не относится к нескольким zero:POS_NO, но я не согласен с тем, что группировка одного узла никогда не бывает полезной, поскольку XSLT group-by позволяет иметь один элемент, принадлежащий нескольким группы Я иногда группировал один узел по ключу значений потомков, например, в stackoverflow.com/a/57828105/252228 Я так и сделал. 17.09.2019
  • Что ж, это определенно инновационно! 17.09.2019
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..