xml - 如何在 XSLT 中创建一个增加 1 个 foreach 循环的计数器,我已经嵌套了 foreach 循环
问题描述
<xsl:template match="Quote">
<Quote>
<xsl:for-each select="Configuration">
<ConfigItem>
<xsl:variable name="GeneratedStructure">
<xsl:variable name="ConfigurationPos" select="position()+10"/>
<configurationPostion><xsl:value-of select = "$ConfigurationPos" /> </configurationPostion>
<!-- <VariableValue><xsl:value-of select="$ConfigurationPos"/></VariableValue>-->
<Vendor><xsl:value-of select="Vendor" /></Vendor>
<PriceListID><xsl:value-of select="PriceListID" /></PriceListID>
<Source><xsl:value-of select="Source" /></Source>
<xsl:for-each select="ProductLineItem">
<ProductLineItem>
<xsl:variable name="ProductPos" select="$ConfigurationPos+(position()*10)"/>
<ProductPostionNumber><xsl:value-of select = "$ProductPos" /></ProductPostionNumber>
</ProductLineItem>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="SubtotalPos" select="max($GeneratedStructure/ProductLineItem/ProductPostionNumber)"/>
<xsl:copy-of select="$GeneratedStructure"/>
<xsl:variable name="max">
<xsl:for-each select="$GeneratedStructure/ProductLineItem/ProductPostionNumber">
<xsl:sort select="." data-type="number" order="descending"/>
</xsl:for-each>
</xsl:variable>
<subMax><xsl:value-of select = "number($max)+10" /></subMax>
</ConfigItem>
</xsl:for-each>
</Quote>
</xsl:template>
如何在 XSLT 中创建一个增加 1 个 foreach 循环的计数器,我在 foreach 循环中有一个 foreach 循环,我已经编写了它,但是一旦父 foreach 循环开始进行下一次迭代,计数器设置为零
解决方案
如果 - 看起来 - 您想使用相同的序列对父级和子级进行编号,请尝试使用xsl:number
. 例如:
XML
<Quote>
<Configuration>
<RowID>12333dddd</RowID>
<ProductLineItem>
<LineNumber>1.0.1</LineNumber>
</ProductLineItem>
<ProductLineItem>
<LineNumber>2.0.1</LineNumber>
</ProductLineItem>
</Configuration>
<Configuration>
<RowID>12ss333dddd</RowID>
<ProductLineItem>
<LineId>5165550509</LineId>
</ProductLineItem>
</Configuration>
</Quote>
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="Quote">
<Quote>
<xsl:for-each select="Configuration">
<ConfigItem>
<configurationPostion>
<xsl:number count="Configuration | ProductLineItem" level="any"/>
</configurationPostion>
<xsl:for-each select="ProductLineItem">
<ProductPostionNumber>
<xsl:number count="Configuration | ProductLineItem" level="any"/>
</ProductPostionNumber>
</xsl:for-each>
</ConfigItem>
</xsl:for-each>
</Quote>
</xsl:template>
</xsl:stylesheet>
结果
<?xml version="1.0" encoding="utf-16"?>
<Quote>
<ConfigItem>
<configurationPostion>1</configurationPostion>
<ProductPostionNumber>2</ProductPostionNumber>
<ProductPostionNumber>3</ProductPostionNumber>
</ConfigItem>
<ConfigItem>
<configurationPostion>4</configurationPostion>
<ProductPostionNumber>5</ProductPostionNumber>
</ConfigItem>
</Quote>
推荐阅读
- angular - Angular NgPrime 表获取未选中复选框的所有数据
- processing - 处理,如何设置最小音量?
- javascript - 读取excel文件并更新网页信息?[HTML]
- node.js - 读取太多数据时 Firebase 卡住
- scheme - 了解 Scheme 中 n 个列表上的 n 元运算的映射模式
- cloud-init - 运行 cloud-init cloud-config yaml 文件
- verilog - Verilog中有“?1:0”的理由吗?
- excel-formula - excel方差和标准差-如何键入公式以便可以在特定日期范围内计算?从当前日期到 1 个月前,
- matlab - 分组条形图的自定义着色
- php - CodeIgniter - 如何在一个查询中结合 where() 和 where_not_in()?