如何根据XSLT2.0中所有重复元素的值做出决策
我有以下XML输入,我想对其执行一些转换 输入XML:如何根据XSLT2.0中所有重复元素的值做出决策,xslt,mapping,xslt-grouping,Xslt,Mapping,Xslt Grouping,我有以下XML输入,我想对其执行一些转换 输入XML: <itemDetails> <itemShipmentDate>2017-06-19</itemShipmentDate> <itemBillingDate>2017-06-15</itemBillingDate> <itemLines> <itemLine> <itemId>1&
<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>
<OutputDetails xmlns:xs="http://www.w3.org/2001/XMLSchema">
<itemSDate>2017-06-19</itemSDate>
<itemBDate>2017-06-15</itemBDate>
<AllItemsQuantityFlag>Yes</AllItemsQuantityFlag>
</OutputDetails>
<?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>
2017-06-19
2017-06-15
1.
0
2.
0
3.
0
4.
0
5.
0
问题陈述:
<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>
<OutputDetails xmlns:xs="http://www.w3.org/2001/XMLSchema">
<itemSDate>2017-06-19</itemSDate>
<itemBDate>2017-06-15</itemBDate>
<AllItemsQuantityFlag>Yes</AllItemsQuantityFlag>
</OutputDetails>
<?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>
我想检查一下,如果所有itemLine中的“Quantity”标记都等于零,那么在输出中的一个字段,即“AllItemsQuantityFlag”值应该是“Yes”,如果其中一个Quantity标记不是零,那么输出应该是“No”。
所以,有点像其他情况
因此,在上述输入情况下,我们将有以下输出:
所需输出:
<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>
<OutputDetails xmlns:xs="http://www.w3.org/2001/XMLSchema">
<itemSDate>2017-06-19</itemSDate>
<itemBDate>2017-06-15</itemBDate>
<AllItemsQuantityFlag>Yes</AllItemsQuantityFlag>
</OutputDetails>
<?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>
2017-06-19
2017-06-15
对
以下是我的XSLT表:
XSLT工作表:
<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>
<OutputDetails xmlns:xs="http://www.w3.org/2001/XMLSchema">
<itemSDate>2017-06-19</itemSDate>
<itemBDate>2017-06-15</itemBDate>
<AllItemsQuantityFlag>Yes</AllItemsQuantityFlag>
</OutputDetails>
<?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>
对
不
有人能告诉我怎么做吗?我只希望这个字段“”在输出中出现一次。您可以使用检查
some…并将布尔值转换为数字:
<AllItemsQuantityFlag>
<xsl:value-of
select="number(some $il in itemLines/itemLine satisfies $il/itemQuantity != 0) "/>
</AllItemsQuantityFlag>
或稍后:
<xsl:value-of select="number(itemLines/itemLine/itemQuantity!=0)"/>
请注意,“非零”包括空。感谢您的回复,它可以工作,但如果我想用稍微不同的方式检查它,如果全部为零,则我想写“是”,如果至少一个输入字段中有“1”,则我想写“否”“在田野里。对不起,我刚才忘了提。。我现在已经编辑了这个问题。@omerkhalid然后使用:
谢谢你的回答,但是如果我想用稍微不同的方式检查它,如果全部为零,那么我想写“是”,如果至少一个输入字段中有“1”,那么我想在字段中写“否”。对不起,我刚才忘了提。。我现在编辑了这个问题。你现在能看一下吗??