如何完成我的 xsl 文件以将我的 XML 转换为另一个 XML

How do I complete my xsl file to have my XML transform in to an other XML

我有一个 XML 文件(我在这里提供),我想将这个 XML 文件转换为另一个 XML 文件(你可以看到我想要的结果在这里的第二个代码中)使用 .XSL 文件我想完成这个

原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>

现在我看到需要selectexpress类型的请求,设置line2"00186 ROMA"作为city的属性,属性requestId作为request的子元素,复制request的request元素我的项目元素。但是走了几步就卡住了。

我怎样才能做到这一点。

以下 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 中,模板仅应用于类型为 expressrequest 个元素:<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