如何完成我的xsl文件以将XML转换为其他XML

时间:2015-01-09 01:15:19

标签: xml xslt transformation

我有一个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元素。但经过几个步骤后我就陷入了困境。

我怎样才能做到这一点。

1 个答案:

答案 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