检查节点是否包含值XSLT

时间:2014-11-16 10:03:35

标签: xml xslt

我有以下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收到值。

1 个答案:

答案 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包含需要删除的空格,然后才能进行比较