簡體   English   中英

需要幫助來創建XSL文件,該文件會將輸入XML文件input.xml轉換為output.xml格式

[英]Need help to create an XSL file that will transform the input XML file input.xml to the format of output.xml

我需要:

  1. input.xml (以下文件)轉換為output.xml的格式
  2. 創建另一個XLS,將按每種金額顯示: KGPALM3總值;
  3. 從點2開始,在同一XSL中,將標記<quantity>替換為標記<amount>
  4. 創建另一個XSL,該XSL僅為每個<order>添加一個額外的標簽<hour> <order>並在該標簽內顯示加載時間( hh:MM

但是首先,我需要轉換此文件( input.xml ):

<?xml version="1.0" encoding="ISO-8859-1"?>
<output>
<orders>
    <order>
        <id>1</id>
        <number>10002</number>
        <type>Loading</type>
        <date>2013-01-01T02:30:00</date>
    </order>
    <order>
        <id>2</id>
        <number>10003</number>
        <type>Loading</type>
        <date>2013-01-01T010:30:00</date>
    </order>
    <order>
        <id>3</id>
        <number>10004</number>
        <type>Loaded</type>
        <date>2013-01-01T12:30:00</date>
    </order>
</orders>
<quantities>
    <quantity>
        <id_order>1</id_order>
        <unit>KG</unit>
        <value>1000</value>
    </quantity>
    <quantity>
        <id_order>1</id_order>
        <unit>PAL</unit>
        <value>3</value>
    </quantity>
    <quantity>
        <id_order>1</id_order>
        <unit>M3</unit>
        <value>1.5</value>
    </quantity>
    <quantity>
        <id_order>2</id_order>
        <unit>KG</unit>
        <value>2000</value>
    </quantity>
    <quantity>
        <id_order>2</id_order>
        <unit>PAL</unit>
        <value>4</value>
    </quantity>
    <quantity>
        <id_order>3</id_order>
        <unit>KG</unit>
        <value>5000</value> 
    </quantity>
</quantities>
</output>

到此文件( output.xml ):

<?xml version="1.0" encoding="ISO-8859-1"?>
<output>
<orders>
    <order>
        <id>1</id>
        <number>10002</number>
        <type>Loading</type>
        <KG>1000</KG>
        <PAL>3</PAL>
        <M3>1.5</M3>
    </order>
    <order>
        <id>2</id>
        <number>10003</number>
        <type>Loading</type>
        <KG>2000</KG>
        <PAL>4</PAL>
    </order>
    <order>
        <id>3</id>
        <number>10004</number>
        <type>Loaded</type>
        <KG>5000</KG>
    </order>
</orders>
</output>

我嘗試了此操作,但還不完整,我不知道如何將值(例如:輸入文件中的PAL )轉換為屬性(例如輸出文件中的<PAL>...</PAL> )。 我環顧四周,嘗試了一些嘗試,但是沒有用。 有人可以幫我弄這個嗎。 以下是我的XSLT。 提前致謝。

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

<xsl: template match = "/">
    <output>
            <xsl: for-each select = "orders/order[id = 1]">
            <order>
                    <xsl: value-of select = "id"/>
                    <xsl: value-of select = "number"/>
                    <xsl: value-of select = "type"/>
            </order>
            </xsl: for-each>
            <xsl: for-each select = "quantities/quantity">
            <order>
                    <xsl: value-of select = "id"/>
                    <xsl: value-of select = "number"/>
                    <xsl: value-of select = "type"/>
            </order>
            </xsl: for-each>
    </output>

您需要通過匹配訂單ID將數量鏈接到其各自的訂單。 最好的方法是使用密鑰

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:key name="qty" match="quantity" use="id_order"/>  

<xsl:template match="/">
<output>
    <orders>
        <xsl:for-each select="output/orders/order"> 
            <order>
                <xsl:copy-of select="id|number|type"/>
                <xsl:for-each select="key('qty', id)">
                    <xsl:element name="{unit}">
                        <xsl:value-of select="value"/>  
                    </xsl:element>
                </xsl:for-each>
            </order>    
        </xsl:for-each>
    </orders>
</output>
</xsl:template>

</xsl:stylesheet>

請注意,我們假設每個訂單的每個單位的數量不超過一個(即,無需求和)。 在我看來,目標結構也沒有比您開始使用時有用的結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM