我有以下xml:
<Reply>
<OptionInfoReply>
<Option>
<Opt>EDIFBEB </Opt>
<OptAvail>-3 </OptAvail>
</Option>
<Option>
<Opt>CHSFBEB </Opt>
<OptAvail>-3 </OptAvail>
</Option>
<Option>
<Opt>WESFBEB </Opt>
<OptAvail>-3 </OptAvail>
</Option>
我为每个人使用的anthoer XML:
<Reply>
<OptionInfoReply>
<Option>
<Opt>CHSFBEB</Opt>
</Option>
</OptionInfoReply>
</Reply>
我正在为第二个xml中的每一个移动。我想检查第二个XML中CHSFBEB的值是否存在于第一个xml中。
<xsl:template match="/">
<xsl:for-each select="/Reply/OptionInfoReply/Option">
<xsl:variable name="SearchOPT" select="Opt"/>
<db:AVAILABLE_ROOMS_NO>
<xsl:value-of select="$AVL/Reply/OptionInfoReply/Option/Opt[contains(.,$SearchOPT)]/../OptAvail"/>
</db:AVAILABLE_ROOMS_NO>
</xsl:for-each>
</xsl:template>
但是,如果在第一个XML中我有多个选项,我没有得到OptAvail的值(来自第一个xml)。如果我只有一个节点,我将从OptAvail收到值。
答案 0 :(得分:0)
希望这有帮助,
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:MyUtils="pda:MyUtils">
<xsl:template match="/">
<check>
<xsl:variable name="second" select="MyUtils:getSecondXMLData()//Opt"/>
<xsl:for-each select="//Option">
<xsl:if test="Opt=$second">
<AVAILABLE_ROOMS_NO>
<xsl:value-of select="OptAvail"/>
</AVAILABLE_ROOMS_NO>
</xsl:if>
</xsl:for-each>
</check>
</xsl:template>
</xsl:stylesheet>
我还没有通过文档功能获取第二个xml。该部分通过扩展功能完成&#34; getSecondXMLData()&#34;它从第二个xml中提供一组节点。 我假设你的第一个xml是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<Reply>
<OptionInfoReply>
<Option>
<Opt>EDIFBEB</Opt>
<OptAvail>-3</OptAvail>
</Option>
<Option>
<Opt>CHSFBEB</Opt>
<OptAvail>-3 </OptAvail>
</Option>
<Option>
<Opt>WESFBEB</Opt>
<OptAvail>-3 </OptAvail>
</Option>
<Option>
<Opt>CHSFBEB</Opt>
<OptAvail>-3 </OptAvail>
</Option>
</OptionInfoReply>
</Reply>
请注意,您的第一个xml包含需要删除的空格,然后才能进行比较