【发布时间】:2016-02-10 16:11:42
【问题描述】:
我想要的结果是:
对于每个与//root/document/DetailGroup/Detail/Order/contract/@contractId 匹配的//root/document/ins/@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>
编辑:我只能使用 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 并解释您遇到问题的地方?
-
嗨!抱歉,回答迟了,我会稍微编辑一下我正在尝试做的事情,但失败了。我遇到的问题是将正确的contractIds匹配在一起。