Xml 检查节点是否包含值XSLT
我有以下xml:Xml 检查节点是否包含值XSLT,xml,xslt,Xml,Xslt,我有以下xml: <Reply> <OptionInfoReply> <Option> <Opt>EDIFBEB </Opt> <OptAvail>-3 </OptAvail> </Option> <Option> <Opt>CHSFBEB </Opt> <OptAvail&g
<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。我想检查第一个XML中是否存在来自第二个XML的CHSFBEB值
<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中我有多个选项,我不会从第一个XML中获得OptAvail的值。如果我只有一个节点,我将从OptAvail接收值。希望这有帮助
<?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。这一部分是通过扩展函数getSecondXMLData完成的,它提供了第二个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包含空格,在实际进行比较之前需要删除这些空格欢迎使用SO。进一步简化代码可能是一个好主意:删除任何不相关的内容,例如我猜测输出中的所有db:元素。一般来说,让你的问题易于阅读意味着你能得到更多更好的答案。不要忘记解释“不工作”是什么意思。在当前示例中,在第一个XML中确实有多个选项,但XSLT将按预期工作,因为它返回-3。或者是这样,您可能会在第一个XML中多次出现CHSFBEB?如果是这样的话,你能举个例子,并给出你期望的结果吗?谢谢