0

我有一个从 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”中选择全部/在哪里。并用 / 映射它并得到对应的 .

我想我可以使用一个数组来存储和做映射。请帮助我

4

1 回答 1

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,所以你可以做你最终决定需要用它做的事情。

于 2012-08-02T13:06:29.983 回答