XPath “in” operator

后端 未结 3 1907
误落风尘
误落风尘 2021-01-17 22:57

Is there is an operator in XPath 1.0 that acts as \"in\" operator in SQL?

select * from tbl_students where id in (1,2,3)
相关标签:
3条回答
  • 2021-01-17 23:27

    To find out if the 'id' you search is in the sequence of (1, 2, 3, 4) index-of() might be a choice. Pay attention it returns list of indexes.

    For a document part like

    <student id='1'/>
    <student id='101'/>
    <student id='1001'/>
    

    Select will something like

    //*[not(empty(index-of((1, 2, 3, 4), @id)))]
    
    0 讨论(0)
  • 2021-01-17 23:29

    The = operator of XPath 1.0 works that way, though XPath 1.0 doesn't provide syntax for writing sequences. So if you have an XML document of the form

    <doc>
      <value>1</value>
      <value>2</value>
      <value>3</value>
    </doc>
    

    then an expression like //doc[value = 2] will return that doc element.

    In XPath 2.0, the syntax (1, 2, 3) will create a sequence of three integers, and you can write conditions like $i = (1, 2, 3). But literal sequences are not a feature of XPath 1.0 -- the only way to get multiple values on one side of an XPath expression is to use a path expression that matches multiple nodes.

    0 讨论(0)
  • 2021-01-17 23:45

    I had the same problem, the above answer is right. To make it more clear, in Xpath this will look something like:

    //*:document[*:documentType=("magazine","newspaper")]
    

    wich would be the equivalant of:

    select * from documents where documenttype in ('newsletter','magazine')
    
    0 讨论(0)
提交回复
热议问题