我有一个XML文件(我在这里提供)和这个XML我希望使用.XSL转换其他XML文件(你可以在这里的第二个代码中看到我希望得到的结果)文件我想完成这个
原始XML
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="Test.xsl"?>
<requests>
<request requestId="req0001" type="standard">
<shipmentAdress>
<line1>33, del Plebiscito </line1>
<line2>60100 Ancona</line2>
<line3>Italy</line3>
</shipmentAdress>
<items>
<item productId="L 220.kaalie" quantity="15" />
</items>
<note>dont come here realy big dog.</note>
</request>
<request requestId="req0003" type="express">
<shipmentAdress>
<line1>Ignazio 52</line1>
<line2>00186 ROMA</line2>
<line3>Lazio</line3>
<line4>Italy</line4>
</shipmentAdress>
<items>
<item productId="frindutyloiuunt" quantity="100" />
<item productId="L 149.kilopoz" quantity="50" />
<item productId="L 160.rtyniue" quantity="150" />
</items>
</request>
<request requestId="req0002" type="express">
<shipmentAdress>
<line1>Ignazio 54</line1>
<line2>00186 ROMA</line2>
<line3>Lazio</line3>
<line4>Italy</line4>
</shipmentAdress>
<items>
<item productId="fulky245" quantity="150" />
<item productId="kilmoniy23" quantity="500" />
<item productId="Frienudyt34" quantity="10" />
<item productId="DERULIA45" quantity="200" />
</items>
<note>This is <b>hard to find</b> !</note>
</request>
</requests>
XML如何管理我的转型
<?xml version="1.0" encoding="utf-8"?>
<expressOrders>
<request city="00186 ROMA">
<req>req0003</req>
<items>
<item productId="frindutyloiuunt" quantity="100" />
<item productId="L 149.kilopoz" quantity="50" />
<item productId="L 160.rtyniue" quantity="150" />
</items>
</request>
<request city="00186 ROMA">
<req>req0002</req>
<items>
<item productId="fulky245" quantity="150" />
<item productId="kilmoniy23" quantity="500" />
<item productId="Frienudyt34" quantity="10" />
<item productId="DERULIA45" quantity="200" />
</items>
</request>
</expressOrders>
我的xsl文件
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="requests">
<expressOrders>
</expressOrders>
</xsl:template>
<xsl:template match="request">
</xsl:template>
</xsl:stylesheet>
现在我看到需要选择express类型的请求,设置line2&#34; 00186 ROMA&#34;作为city的属性,属性requestId作为请求的childelement并复制我的item元素的request元素。但经过几个步骤后我就陷入了困境。
我怎样才能做到这一点。
答案 0 :(得分:2)
以下XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="requests">
<expressOrders>
<xsl:apply-templates select="request[@type='express']"/>
</expressOrders>
</xsl:template>
<xsl:template match="request">
<request>
<xsl:attribute name="city">
<xsl:value-of select="shipmentAdress/line2"/>
</xsl:attribute>
<req><xsl:value-of select="@requestId"/></req>
<xsl:copy-of select="items"/>
</request>
</xsl:template>
</xsl:stylesheet>
当应用于您的输入时,XML会生成输出
<?xml version="1.0" encoding="utf-8"?>
<expressOrders>
<request city="00186 ROMA">
<req>req0003</req>
<items>
<item productId="frindutyloiuunt" quantity="100"/>
<item productId="L 149.kilopoz" quantity="50"/>
<item productId="L 160.rtyniue" quantity="150"/>
</items>
</request>
<request city="00186 ROMA">
<req>req0002</req>
<items>
<item productId="fulky245" quantity="150"/>
<item productId="kilmoniy23" quantity="500"/>
<item productId="Frienudyt34" quantity="10"/>
<item productId="DERULIA45" quantity="200"/>
</items>
</request>
</expressOrders>
在匹配requests
的模板中,模板仅应用于request
类型的express
元素:<xsl:apply-templates select="request[@type='express']"/>
匹配request
的模板将属性city
设置为request
元素:
<request>
<xsl:attribute name="city">
<xsl:value-of select="shipmentAdress/line2"/>
</xsl:attribute>
将requestId
的值设置为req
节点中的值:
<req><xsl:value-of select="@requestId"/></req>
并将items
节点(包括所有item
个子节点)复制到请求中:
<xsl:copy-of select="items"/>
作为XPath语法和位置路径的有用资源,您可以检查http://www.w3.org/TR/1999/REC-xpath-19991116/#path-abbrev