0

Web サービスから取得する XML 応答があります。XSLT を使用してこの XML を変換し、データを DB に挿入する必要があります。サンプルの 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 に答える