![](/img/trans.png)
[英]Executing external .js file from HTML page, by sending input.xml and getting output.xml from external.js file
[英]Need help to create an XSL file that will transform the input XML file input.xml to the format of output.xml
我需要:
input.xml
(以下文件)轉換為output.xml
的格式 KG
, PAL
和M3
總值; <quantity>
替換為標記<amount>
; <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.