Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 检查节点是否包含值XSLT_Xml_Xslt - Fatal编程技术网

Xml 检查节点是否包含值XSLT

Xml 检查节点是否包含值XSLT,xml,xslt,Xml,Xslt,我有以下xml: <Reply> <OptionInfoReply> <Option> <Opt>EDIFBEB </Opt> <OptAvail>-3 </OptAvail> </Option> <Option> <Opt>CHSFBEB </Opt> <OptAvail&g

我有以下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。我想检查第一个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?如果是这样的话,你能举个例子,并给出你期望的结果吗?谢谢