从我正在使用的XML文件开始,如下所示
**<composite code="ReceivedQty">
<element code="CODE">
<value>**00228298150-004**</value>
</element>
<element code="DATE">
<value>11-19-2014</value>
</element>
<element code="RECQTY">
<value>0</value>
</element>
<element code="NOTES">
<value>004A</value>
</element>
</composite>**
**<composite code="ReceivedQty">
<element code="CODE">
<value>**00228298150**</value>
</element>
<element code="DATE">
<value>11-19-2014_11-19-2014</value>
</element>
<element code="RECQTY">
<value>0_0</value>
</element>
<element code="NOTES">
<value>new003AAA%#$^003B</value>
</element>
</composite>**
如上面的XML文件所示,<element code="CODE">
有两个值00228298150
和00228298150-004
。
相应的XSL文件代码是
<xsl:for-each select="//table[@section='detail']/loop">
<xsl:variable name="ndcNumber">
<xsl:value-of select="segment/element[@name='Product/Service ID']/value"/>
</xsl:variable>
<xsl:variable name="lineNumber">
<xsl:value-of select="segment/element[@name='Assigned Identification']/value"/>
</xsl:variable>
<xsl:variable name="ndcLineNumber">
<xsl:value-of select="concat($ndcNumber,'-',$lineNumber)"/>
</xsl:variable>
<xsl:variable name="receivedQty">
<xsl:value-of select="/envelope/segment[@code='ACK']/composite[@code='ReceivedQty' and element[@code='CODE' and value=$**ndcLineNumber**]]/element[@code='RECQTY']/value"/>
</xsl:variable>
</<xsl:for-each>
在XSL文件中,当定义变量“receivedOty”时,使用xsl选择值将其定义为ndcLinenumber(15位数)。因此,当呈现HTML页面时,页面上仅显示具有值“00228298150-004”的元素代码= CODE的数据。
我想在XSL文件中添加代码,因此元素代码= CODE的数据值为“00228298150”也会显示在HTML页面上。
$ndcnumber
是(11个字符)和$ndclinenumber
(15个字符)
基本上,现在我只能访问和检索ndcnumber
或ndclinenumber
中的一个值。我希望我的XSL同时从XML中检索这两个值。
也许在if else块中处理它。我想我可以找出元素代码值的长度,这样我可以检查长度(值)&gt; 11位数然后使用变量ndclinenumber,否则使用ndcnumber。
任何人都知道我怎么能这样做?谢谢!
答案 0 :(得分:0)
我不确定“同时从XML中检索两个值”是什么意思,但考虑使用密钥按代码值查找composite
元素。
<xsl:key name="comp"
match="segment[@code='ACK']/composite[@code='ReceivedQty']"
use="element[@code='CODE']/value" />
然后您当前的xsl:value-of
可以简化为此
<xsl:value-of select="key('comp', $ndcLineNumber)/element[@code='RECQTY']/value"/>
当然,您可以添加第二个xsl:value-of
来获取其他值
<xsl:value-of select="key('comp', $ndcNumber)/element[@code='RECQTY']/value"/>
但请考虑在这里使用一些模板匹配。您可以像这样添加xsl:apply-templates
:
<xsl:apply-templates select="key('comp', $ndcLineNumber)|key('comp', $ndcNumber)" mode="test"/>
然后模板匹配就像这样:
<xsl:template match="composite" mode="test">
<xsl:value-of select="element[@code='RECQTY']/value" />,
</xsl:template>
(这里可能不需要使用“模式”,但我把它放在以防万一你在XSLT中有一个匹配composite
的单独模板。)