0

私はXMLを持っています:

<StockInfo>
<Item>
<stockcode>111111</stockcode>
<vehicle>Ford</vehicle>
<model>Escape (2000-)</model>
<model>Maverick (2001-)</model>
<width>8</width>
<wheel_size>18</wheel_size>
<offset>35</offset>
<bolt_pattermn>5x114.3</bolt_pattermn>
<brand>ANTERA</brand>
<Velg_ID/>
<kit1>DK-135259671 x1</kit1>
<kit2/>
<kit3/>
<kit4/>
<qty_available>3.00000000</qty_available>
<price>1110.00</price>
<picture>410110
</picture>
</Item>
<Item>

<stockcode>111111</stockcode>
<vehicle>Honda</vehicle>
<model>Civic (5skr,2001-2006)(2006-)</model>
<model>Accord (2003-2008)</model>
<model>Acord Coupe (1999-)</model>
<model>Acord Type R</model>
<model>Civic Type R (2001-2006)(2007-,17"&lt;)</model>
<model>Civic Type S (2001-2006)(2007-,17"&lt;)</model>
<model>Integra Type R~Prelude (1997-2001)</model>
<model>Legend (1991-1999)</model>
<width>8</width>
<wheel_size>18</wheel_size>
<offset>40</offset>
<bolt_pattermn>5x114.3</bolt_pattermn>
<brand>ANTERA</brand>
<Velg_ID/>
<kit1>DK-135259641 x1</kit1>
<kit2/>
<kit3/>
<kit4/>
<qty_available>3.00000000</qty_available>
<price>1110.00</price>
<picture>410110
</picture>
</Item>
<Item>

<stockcode>2222222</stockcode>
<vehicle>BMW</vehicle>
<model>6 (e63/64, 2004-2011)</model>
<model>M6 (e63/64, 2004-2011)</model>
<width>9</width>
<wheel_size>18</wheel_size>
<offset>15</offset>
<bolt_pattermn>5x120</bolt_pattermn>
<brand>AEZ</brand>
<Velg_ID>AEZ Ares</Velg_ID>
<kit1>DK-ZJB3 x1</kit1>
<kit2/>
<kit3/>
<kit4/>
<qty_available>4.00000000</qty_available>
<price>151110.00</price>
<picture>41001
</picture>
</Item>
</StockInfo>

XSLT 1.0 では、要素 'stockcode' を使用してアイテムを XML にグループ化する必要があります。ターゲット XML には、重複する要素は必要ありません (同一のアイテムについては、他の同一のアイテムから取得する必要があるのは「vehicle」要素と「model」要素だけです...)

そのような XML を取得する必要があります。

<StockInfo>
<Item>
<stockcode>111111</stockcode>
<vehicle>Ford</vehicle>
<model>Escape (2000-)</model>
<model>Maverick (2001-)</model>
<vehicle>Honda</vehicle>
<model>Civic (5skr,2001-2006)(2006-)</model>
<model>Accord (2003-2008)</model>
<model>Acord Coupe (1999-)</model>
<model>Acord Type R</model>
<model>Civic Type R (2001-2006)(2007-,17"&lt;)</model>
<model>Civic Type S (2001-2006)(2007-,17"&lt;)</model>
<model>Integra Type R~Prelude (1997-2001)</model>
<model>Legend (1991-1999)</model>
<width>8</width>
<wheel_size>18</wheel_size>
<offset>40</offset>
<bolt_pattermn>5x114.3</bolt_pattermn>
<brand>ANTERA</brand>
<Velg_ID/>
<kit1>DK-135259641 x1</kit1>
<kit2/>
<kit3/>
<kit4/>
<qty_available>3.00000000</qty_available>
<price>1110.00</price>
<picture>410110</picture>
</Item>
<Item>

<stockcode>2222222</stockcode>
<vehicle>BMW</vehicle>
<model>6 (e63/64, 2004-2011)</model>
<model>M6 (e63/64, 2004-2011)</model>
<width>9</width>
<wheel_size>18</wheel_size>
<offset>15</offset>
<bolt_pattermn>5x120</bolt_pattermn>
<brand>AEZ</brand>
<Velg_ID>AEZ Ares</Velg_ID>
<kit1>DK-ZJB3 x1</kit1>
<kit2/>
<kit3/>
<kit4/>
<qty_available>4.00000000</qty_available>
<price>151110.00</price>
<picture>41001</picture>
</Item>
</StockInfo>
4

2 に答える 2

0

私は何か間違ったことをしていると思います...フォーラム、チュートリアルを調べて、そのようなコードを動作させようとしました:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>

<xsl:key name="stcode" match="StockInfo/Item" use="stockcode" />

<xsl:template match="Item" mode="group">
<xsl:for-each select="/StockInfo/Item[generate-id() = generate-id(key('stcode',stockcode))]">
<xsl:value-of select="stockcode"/>
<xsl:value-of select="vehicle"/>
<xsl:value-of select="model"/>
...
<xsl:value-of select="other_elements"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

しかし、ソース XML と同じ XML を返します...

于 2012-11-15T03:26:25.467 に答える
0

xslt1.0でグループ化できます

<xsl:key name="stockKey" match="StockInfo/Item" use="stockcode"/>
<xsl:for-each select="/StockInfo/Item
        [generate-id() = generate-id(key('stockKey',stockcode))]">
            <xsl:value-of select="stockcode"/>
</xsl:for-each>

このXSLT グループ化と並べ替えの例 (Muenchian 法)も参照してください。

于 2012-11-14T19:47:55.100 に答える