В результате я хочу это:XSLT 1.0 Преобразование структуры вопрос
Для каждого //root/document/ins/@contractId
, который имеет матч с //root/document/DetailGroup/Detail/Order/contract/@contractId
и DetailSubtype
является грубым, order type=Surrender
.
Информация о транзакции должна быть суммирована. Сумма, которую необходимо суммировать, должна ТОЛЬКО быть full_sur
и partial_sur
, все остальное должно быть проигнорировано
И они хотят иметь конкретную структуру, один раз для каждой логики соответствия.
Первый файл XML, который должен быть преобразован:
<Document>
<ins contractId="670">
<Role>
<person personId="60"/>
<role>INS</role>
</Role>
</ins>
<ins contractId="477">
<Role>
<person personId="60"/>
<role>OWN</role>
</Role>
</ins>
<DetailGroup>
<Detail type="detailgross" DetailId="25">
<DetailSubtype>GROSS</DetailSubtype>
<Order type="Surrender">
<contract contractId="477"/>
<Transaction>
<Transaction>
<completedAmount>1443.08</completedAmount>
<TransactionSubtype>yield</TransactionSubtype>
</Transaction>
<Transaction>
<completedAmount>100.00</completedAmount>
<TransactionSubtype>fee</TransactionSubtype>
</Transaction>
<Transaction>
<completedAmount>200.00</completedAmount>
<TransactionSubtype>full_sur</TransactionSubtype>
</Transaction>
</Transaction>
</Order>
</Detail>
<Detail type="detailgross" DetailId="24">
<DetailSubtype>gross</DetailSubtype>
<Order type="Surrender">
<contract contractId="670"/>
<Transaction>
<Transaction>
<completedAmount>1443.08</completedAmount>
<TransactionSubtype>fee</TransactionSubtype>
</Transaction>
<Transaction>
<completedAmount>100.00</completedAmount>
<TransactionSubtype>full_sur</TransactionSubtype>
</Transaction>
<Transaction>
<completedAmount>1000.00</completedAmount>
<TransactionSubtype>partial_sur</TransactionSubtype>
</Transaction>
</Transaction>
</Order>
</Detail>
</DetailGroup>
</Document>
И тогда, как им это нужно смотреть:
<root>
<document>
<person role="INS" personId="60">
</person>
<bet>
<spar>
<at sum="1100"/>
</spar>
</bet>
</document>
<document>
<person role="OWN" personId="60">
</person>
<bet>
<spar>
<at sum="200"/>
</spar>
</bet>
</document>
</root>
EDIT: Я могу только использовать XSLT 1.0
<xsl:template name="example">
<xsl:variable name="detailId" select="//Document/DetailGrooup/Detail/Order/contract"/>
<xsl:for-each select="//Document/ins[@contractId=$detailId/@contractId]">
<document>
<person>
<xsl:attribute name="Role">
<xsl:value-of select="//Document/Role"/>
</xsl:attribute>
<xsl:attribute name="personId">
<xsl:value-of select="//Document/Role/Person/@PersonId"/>
</xsl:attribute>
</person>
<bet>
<spar>
<xsl:if test=".././DetailGrooup/Detail[DetailSubtype='GROSS' and ./Order/@type='Surrender' and /Order/Transaction/Transaction/TransactionSubtype='full_sur']">
<xsl:attribute name="at">
<xsl:value-of select="sum(//Document/DetailGrooup/Detail/Order[/contract/@contractId='@contractId']/Transaction/Transaction/completedAmount)"
</xsl:attribute>
</xsl:if>
</spar>
</bet>
</document>
</xsl:for-each>
</xsl:template>
В чем вопрос? Я вижу только требования. Можете ли вы добавить XSLT, который вы пробовали, и объяснить, где у вас проблемы? –
Привет! Извините за поздний ответ, я отредактирую несколько, что я пытаюсь сделать, и провалился. Проблема im имеет совмещение правильных contractIds вместе. –