我有以下XML输入,我想对它进行一些转换。
输入XML:
<itemDetails>
<itemShipmentDate>2017-06-19</itemShipmentDate>
<itemBillingDate>2017-06-15</itemBillingDate>
<itemLines>
<itemLine>
<itemId>1</itemId>
<itemQuantity>0</itemQuantity>
</itemLine>
<itemLine>
<itemId>2</itemId>
<itemQuantity>0</itemQuantity>
</itemLine>
<itemLine>
<itemId>3</itemId>
<itemQuantity>0</itemQuantity>
</itemLine>
<itemLine>
<itemId>4</itemId>
<itemQuantity>0</itemQuantity>
</itemLine>
<itemLine>
<itemId>5</itemId>
<itemQuantity>0</itemQuantity>
</itemLine>
</itemLines>
</itemDetails>
问题陈述:
我想检查如果所有itemLine中的“Quantity”标签等于零,那么在输出中一个字段即“AllItemsQuantityFlag”值应为“是,如果其中一个数量标签不为零,那么输出应为“否”。 所以,有点像IF其他场景。
所以,在上面提到的输入案例中,我们将得到以下输出:
期望输出:
<OutputDetails xmlns:xs="http://www.w3.org/2001/XMLSchema">
<itemSDate>2017-06-19</itemSDate>
<itemBDate>2017-06-15</itemBDate>
<AllItemsQuantityFlag>Yes</AllItemsQuantityFlag>
</OutputDetails>
以下是我的XSLT表:
XSLT表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/itemDetails">
<OutputDetails>
<itemSDate>
<xsl:value-of select="itemShipmentDate"/>
</itemSDate>
<itemBDate>
<xsl:value-of select="itemBillingDate"/>
</itemBDate>
<xsl:for-each select="itemLines/itemLine">
<xsl:choose>
<xsl:when test="IF All Zeros">
<AllItemsQuantityFlag>Yes</AllItemsQuantityFlag>
</xsl:when>
<xsl:otherwise>
<AllItemsQuantityFlag>No</AllItemsQuantityFlag>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</OutputDetails>
</xsl:template>
</xsl:stylesheet>
有人可以就如何做到这一点提出建议。我只想让这个字段“”在输出中出现一次。
答案 0 :(得分:1)
您可以使用支票some ... satisfies
并将布尔值转换为数字:
<AllItemsQuantityFlag>
<xsl:value-of
select="number(some $il in itemLines/itemLine satisfies $il/itemQuantity != 0) "/>
</AllItemsQuantityFlag>
答案 1 :(得分:1)
或者很快:
<xsl:value-of select="number(itemLines/itemLine/itemQuantity!=0)"/>
请注意,“非零”包括空。