我正在从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'。并用/映射它并得到相应的。
我想我可以使用数组来存储和执行映射。请帮帮我
答案 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>