如何使用XSLT声明数组

时间:2012-08-02 11:20:23

标签: xml

我正在从Web服务获取XML响应。我需要使用XSLT转换此XML并将数据插入到数据库中。 XML响应示例如下。

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Body>
<ttordhdr>
 <ttordhdrRow>
    <OH-ORDNBR>123</OH-ORDNBR>
    <OH-ORDTYPE>B</OH-ORDTYPE>
    <OH-DSTNFLR></OH-DSTNFLR>
    <OH-RCVTYP>P</OH-RCVTYP>
  </ttordhdrRow>
  <ttordhdrRow>
    <OH-ORDNBR>456</OH-ORDNBR>
    <OH-ORDTYPE>c</OH-ORDTYPE>
    <OH-DSTNFLR></OH-DSTNFLR>
    <OH-RCVTYP>P</OH-RCVTYP>
  </ttordhdrRow>
 </ttordhdr>
<ttordline>
 <ttordlineRow>
    <OH-ORDNBR>123</OH-ORDNBR>
    <OL-ORDLNNBR>1</OL-ORDLNNBR>
    <OL-ITEMTYPE>true</OL-ITEMTYPE>
    <OL-QTY>10</OL-QTY>
    <OL-DISP></OL-DISP>
    </ttordlineRow>
     <ttordlineRow>
    <OH-ORDNBR>123</OH-ORDNBR>
    <OL-ORDLNNBR>1</OL-ORDLNNBR>
    <OL-ITEMTYPE>true</OL-ITEMTYPE>
    <OL-QTY>10</OL-QTY>
    <OL-DISP></OL-DISP>
    </ttordlineRow>
   </ttordline>
</SOAP-ENV:Body>

我的要求是从/哪里选择所有'B'。并用/映射它并得到相应的。

我想我可以使用数组来存储和执行映射。请帮帮我

1 个答案:

答案 0 :(得分:0)

您仍然没有指定要对数据执行的操作,而是指定以下XSLT 1.0模板:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">

<xsl:output method="xml" indent="yes"/>

<xsl:template match="/">
    <xsl:apply-templates select="//ttordhdr/ttordhdrRow[OH-ORDTYPE[text()='B']]/OH-ORDNBR"/>
</xsl:template>

<xsl:template match="OH-ORDNBR">
    <xsl:variable name="val" select="text()"/>
    <xsl:apply-templates select="//ttordline/ttordlineRow[OH-ORDNBR = $val]"/>
</xsl:template>

<xsl:template match="ttordlineRow">
   <!-- do something here -->
    For OH-ORDNBR <xsl:value-of select="OH-ORDNBR"/>
</xsl:template>
</xsl:stylesheet>

应用于您的数据时:

<?xml version="1.0" encoding="utf-8"?>
    For OH-ORDNBR 123
    For OH-ORDNBR 123

显然本身不太好,但是在底部的模板中(在这里它做了一些事情)你会得到匹配的每一个ttordlineRow,所以你可以做你最终决定需要做的事情。< / p>