0

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>

問題は、データを適切にネストし、冗長部分を削除することです。この非常に難しい問題を解決するための助けをお願いできますか? :)

4

1 に答える 1