XSLT 変換に少し問題があり、あなたの助けが必要です。次のようにデータベース プロシージャ データから受け取ったので、冗長性の少ない構造に変換する必要があります。
入力データの構造は次のとおりです: 1 つのレベルの注文 & 製品 & 製品属性。次に例を示します。
<root>
<Order>
<order_id>1</order_id>
<order_category>Internet Services</order_category>
<product_id>14</product_id>
<product_name>Mobile Internet - standard</product_name>
<product_amount>1</product_amount>
<product_price>9.99</product_price>
<attribute_id>1</attribute_id>
<attribute_name>Discount</attribute_name>
<attribute_value>20%</attribute_value>
</Order>
<Order>
<order_id>1</order_id>
<order_category>Internet Services</order_category>
<product_id>14</product_id>
<product_name>Mobile Internet - standard</product_name>
<product_amount>1</product_amount>
<product_price>9.99</product_price>
<attribute_id>4</attribute_id>
<attribute_name>Additional service</attribute_name>
<attribute_value>Night free</attribute_value>
</Order>
<Order>
<order_id>1</order_id>
<order_category>Internet Services</order_category>
<product_id>17</product_id>
<product_name>Activation</product_name>
<product_amount>100</product_amount>
<product_price>0</product_price>
<attribute_id>1</attribute_id>
<attribute_name>Volume</attribute_name>
<attribute_value>GB</attribute_value>
</Order>
<Order>
<order_id>2</order_id>
<order_category>Device Services</order_category>
<product_id>421</product_id>
<product_name>Modem TS2.3</product_name>
<product_amount>1</product_amount>
<product_price>14.99</product_price>
<attribute_id>4</attribute_id>
<attribute_name>Model</attribute_name>
<attribute_value>TS2.3</attribute_value>
</Order>
<Order>
<order_id>2</order_id>
<order_category>Device Services</order_category>
<product_id>421</product_id>
<product_name>Modem TS2.3</product_name>
<product_amount>1</product_amount>
<product_price>14.99</product_price>
<attribute_id>17</attribute_id>
<attribute_name>SATA</attribute_name>
<attribute_value>4</attribute_value>
</Order>
<Order>
<order_id>2</order_id>
<order_category>Device Services</order_category>
<product_id>16743</product_id>
<product_name>Printer XLV 14</product_name>
<product_amount>1</product_amount>
<product_price>30.99</product_price>
<attribute_id>4</attribute_id>
<attribute_name>Duplex</attribute_name>
<attribute_value>Y</attribute_value>
</Order>
</root>
注文が 2 つしかなく (order_id=1 と order_id=2)、これらの注文が 6 回出現するため、上記のデータは冗長です。同じ問題が製品に関係しています。出力の構造は冗長性を少なくする必要があります。注文には 1 つ以上の製品が含まれる場合があり、各製品には 0 個以上の属性が含まれる場合があります。出力例を以下に示します。
<root>
<Order>
<order_id>1</order_id>
<order_category>Internet Services</order_category>
<products>
<product>
<id>14</id>
<name>Mobile Internet - standard</name>
<amount>1</amount>
<price>9.99</price>
<attributes>
<attribute>
<id>1</id>
<name>Discount</name>
<value>20%</value>
</attribute>
<attribute>
<id>4</id>
<name>Additional service</name>
<value>Night free</value>
</attribute>
</attributes>
</product>
<product>
<id>17</id>
<name>Activation</name>
<amount>100</amount>
<price>0</price>
<attributes>
<attribute>
<id>1</id>
<name>Volume</name>
<value>GB</value>
</attribute>
</attributes>
</product>
</products>
</Order>
<Order>
<order_id>2</order_id>
<order_category>Device Services</order_category>
<products>
<product>
<id>421</id>
<name>Modem TS2.3</name>
<amount>1</amount>
<price>14.99</price>
<attributes>
<attribute>
<id>4</id>
<name>Model</name>
<value>TS2.3</value>
</attribute>
<attribute>
<id>17</id>
<name>SATA</name>
<value>4</value>
</attribute>
</attributes>
</product>
<product>
<id>16743</id>
<name>Printer XLV 14</name>
<amount>1</amount>
<price>30.99</price>
<attributes>
<attribute>
<id>4</id>
<name>Duplex</name>
<value>Y</value>
</attribute>
</attributes>
</product>
</products>
</Order>
</root>
問題は、データを適切にネストし、冗長部分を削除することです。この非常に難しい問題を解決するための助けをお願いできますか? :)