实际上我是XSLT的新手。在处理DB输出时,我使用JDeveloper对每个循环进行dome简单转换。
我当前的业务需要基于条件选择。我有以下输入xml
<?xml version = '1.0' encoding = 'UTF-8'?>
<response>
<head>
<headSeq>101</headSeq>
<date>12/03/2018</date>
</head>
<lines>
<lineItem>
<lineId>L101</lineId>
<item>Laptop</item>
<itemName>Dell</itemName>
<cId>201</cId>
</lineItem>
<lineItem>
<lineId>L102</lineId>
<item>Laptop</item>
<itemName>Dell</itemName>
<cId>202</cId>
</lineItem>
<lineItem>
<lineId>L103</lineId>
<item>Laptop</item>
<itemName>Dell</itemName>
<cId>202</cId>
</lineItem>
</lines>
<configs>
<configItem>
<configId>201</configId>
<configName>I3</configName>
</configItem>
<configItem>
<configId>202</configId>
<configName>I5</configName>
</configItem>
</configs>
</response>
所需输出为
<?xml version = '1.0' encoding = 'UTF-8'?>
<ns0:lineTblRoot>
<ns0:lineTbl>
<ns0:headSeq>101</ns0:headSeq>
<ns0:lineId>L101</ns0:lineId>
<ns0:item>Laptop</ns0:item>
<ns0:itemName>Dell</ns0:itemName>
<ns0:configId>201</ns0:configId>
<ns0:configName>I3</ns0:configName>
</ns0:lineTbl>
<ns0:lineTbl>
<ns0:headSeq>101</ns0:headSeq>
<ns0:lineId>L102</ns0:lineId>
<ns0:item>Laptop</ns0:item>
<ns0:itemName>Dell</ns0:itemName>
<ns0:configId>202</ns0:configId>
<ns0:configName>I5</ns0:configName>
</ns0:lineTbl>
<ns0:lineTbl>
<ns0:headSeq>101</ns0:headSeq>
<ns0:lineId>L103</ns0:lineId>
<ns0:item>Laptop</ns0:item>
<ns0:itemName>Dell</ns0:itemName>
<ns0:configId>202</ns0:configId>
<ns0:configName>I5</ns0:configName>
</ns0:lineTbl>
</ns0:lineTblRoot>
以下XSLT不能产生正确的结果。
<xsl:template match="/">
<ns0:lineTblRoot>
<xsl:for-each select="/ns0:response/ns0:lines/ns0:lineItem">
<ns0:lineTbl>
<ns0:headSeq>
<xsl:value-of select="/ns0:response/ns0:head/ns0:headSeq"/>
</ns0:headSeq>
<ns0:lineId>
<xsl:value-of select="ns0:lineId"/>
</ns0:lineId>
<ns0:item>
<xsl:value-of select="ns0:item"/>
</ns0:item>
<ns0:itemName>
<xsl:value-of select="ns0:itemName"/>
</ns0:itemName>
<ns0:configId>
<xsl:value-of select="ns0:cId"/>
</ns0:configId>
<xsl:for-each select="/ns0:response/ns0:configs/ns0:configItem">
<xsl:choose>
<xsl:when test="/ns0:response/ns0:lines/ns0:lineItem/ns0:cId = /ns0:response/ns0:configs/ns0:configItem/ns0:configId"/>
</xsl:choose>
</xsl:for-each>
<ns0:configName>
<xsl:value-of select="/ns0:response/ns0:configs/ns0:configItem/ns0:configName"/>
</ns0:configName>
</ns0:lineTbl>
</xsl:for-each>
</ns0:lineTblRoot>
</xsl:template>
需要根据与configItem中的configID匹配的lineItem中的cId选择configName。
我错过什么了吗?请帮忙。