【问题标题】:XSLT grouping: first 10 elements as group and next 10 elements as second different group nameXSLT 分组:前 10 个元素作为组,后 10 个元素作为第二个不同的组名
【发布时间】:2019-09-18 07:27:06
【问题描述】:

我正在尝试根据位置将 element1 标签与(键和价格)进行分组,我可以收到 element1 之类的 30 或 40 的 10 的倍数。但是我在将它们分组时遇到问题,比如前 10 个将是一个元素1 和第二组应该命名为 element2 等等

我无法将它们正确分组,也无法重命名这些组。

XSLT

    <xsl:for-each select="element1">
    <xsl:element name="element{position()}">
    <xsl:element name="key"><xsl:value-of select="key"/></xsl:element>
    <xsl:element name="price"><xsl:value-of select="price"/></xsl:element>
    </xsl:element>

    </xsl:for-each>
    </xsl:element>
</xsl:template>

输入:

<?xml version="1.0" encoding="UTF-8"?>
<pricingCondition>
	<element1>
		<key>TAX</key>
		<price>0</price>
	</element1>
	<element1>
		<key>TAX1</key>
		<price>2</price>
	</element1>
	<element1>
		<key>RATE</key>
		<price>7</price>
	</element1>
	<element1>
		<key>PRICE</key>
		<price>24</price>
	</element1>
	<element1>
		<key>FREIGHTVALUE</key>
		<price>0</price>
	</element1>
	<element1>
		<key>NET</key>
		<price>25</price>
	</element1>
	<element1>
		<key>TAX2</key>
		<price>1</price>
	</element1>
	<element1>
		<key>TAX3</key>
		<price>30</price>
	</element1>
	<element1>
		<key>GROSSP</key>
		<price>267</price>
	</element1>
	<element1>
		<key>GROSSV</key>
		<price>4300</price>
	</element1>
	<element1>
		<key>TAX</key>
		<price>01</price>
	</element1>
	<element1>
		<key>TAX1</key>
		<price>02</price>
	</element1>
	<element1>
		<key>RATE</key>
		<price>73</price>
	</element1>
	<element1>
		<key>PRICE</key>
		<price>247</price>
	</element1>
	<element1>
		<key>FREIGHTVALUE</key>
		<price>0</price>
	</element1>
	<element1>
		<key>NET</key>
		<price>15</price>
	</element1>
	<element1>
		<key>TAX2</key>
		<price>11</price>
	</element1>
	<element1>
		<key>TAX3</key>
		<price>10</price>
	</element1>
	<element1>
		<key>GROSSP</key>
		<price>167</price>
	</element1>
	<element1>
		<key>GROSSV</key>
		<price>2300</price>
	</element1>
</pricingCondition>

输出

<?xml version="1.0" encoding="UTF-8"?>
<pricingCondition>
	<element1>
		<key>TAX</key>
		<price>0</price>
	</element1>
	<element1>
		<key>TAX1</key>
		<price>2</price>
	</element1>
	<element1>
		<key>RATE</key>
		<price>7</price>
	</element1>
	<element1>
		<key>PRICE</key>
		<price>24</price>
	</element1>
	<element1>
		<key>FREIGHTVALUE</key>
		<price>0</price>
	</element1>
	<element1>
		<key>NET</key>
		<price>25</price>
	</element1>
	<element1>
		<key>TAX2</key>
		<price>1</price>
	</element1>
	<element1>
		<key>TAX3</key>
		<price>30</price>
	</element1>
	<element1>
		<key>GROSSP</key>
		<price>267</price>
	</element1>
	<element1>
		<key>GROSSV</key>
		<price>4300</price>
	</element1>
	<element2>
		<key>TAX</key>
		<price>01</price>
	</element2>
	<element2>
		<key>TAX1</key>
		<price>02</price>
	</element2>
	<element2>
		<key>RATE</key>
		<price>73</price>
	</element2>
	<element2>
		<key>PRICE</key>
		<price>247</price>
	</element2>
	<element2>
		<key>FREIGHTVALUE</key>
		<price>0</price>
	</element2>
	<element2>
		<key>NET</key>
		<price>15</price>
	</element2>
	<element2>
		<key>TAX2</key>
		<price>11</price>
	</element2>
	<element2>
		<key>TAX3</key>
		<price>10</price>
	</element2>
	<element2>
		<key>GROSSP</key>
		<price>167</price>
	</element2>
	<element2>
		<key>GROSSV</key>
		<price>2300</price>
	</element2>
</pricingCondition>

【问题讨论】:

  • 也发布输入 xml。

标签: xslt xslt-1.0 xslt-grouping


【解决方案1】:

AFAICT,你想做的事:

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:strip-space elements="*"/>

<xsl:template match="/pricingCondition">
    <xsl:copy>
        <xsl:for-each select="element1">
            <xsl:element name="element{ceiling(position() div 10)}">
                <xsl:copy-of select="*"/>
            </xsl:element>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

【讨论】:

  • 不,我想通过每 10 个位置更改 element1 的名称来在内部对元素进行分组。第一个 10 将是 element1,第二个 10 将是 element2 像这样..
  • 是的,这正是它的作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
  • 2011-07-25
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多