如何使用"其中" XQuery中的子句

时间:2017-09-13 16:34:20

标签: xml xpath xquery basex

我尝试仅提取具有特定类型<book>类型的<xref>数据,并使用Xquery匹配特定外部参照列表(我对此新)。

这是输入数据:

  <book id="6636551">
    <master_information>
        <book_xref>
            <xref type="Fiction" type_id="1">72771KAM3</xref>
            <xref type="Non_Fiction" type_id="2">US72771KAM36</xref>
        </book_xref>
    </master_information>
  </book>
  <book id="119818569">
    <master_information>
        <book_xref>
            <xref type="Fiction" type_id="1">070185UL5</xref>
            <xref type="Non_Fiction" type_id="2">US070185UL50</xref>
        </book_xref>
    </master_information>
  </book>
  <book id="119818568">
  <master_information>
        <book_xref>
            <xref type="Fiction" type_id="1">070185UK7</xref>
            <xref type="Non_Fiction" type_id="2">US070185UK77</xref>
        </book_xref>
    </master_information>
  </book>
  <book id="119818567">
    <master_information>
        <book_xref>
            <xref type="Fiction" type_id="1">070185UJ0</xref>
            <xref type="Non_Fiction" type_id="2">US070185UJ05</xref>
        </book_xref>
    </master_information>
  </book>
  <book id="38085123">
    <master_information>
        <book_xref>
            <xref type="Fiction" type_id="1">389646AV2</xref>
            <xref type="Non_Fiction" type_id="2">US389646AV26</xref>
        </book_xref>
    </master_information>
  </book>

我正在使用的XQuery:

for $x in //book 
where $x//xref/@type='Fiction'
and
$x//xref=('070185UL5','070185UJ0')
return $x

以上Xquery仅获取与&#34; 070185UL5&#34;匹配的第一本书信息。我希望它能同时取两者。怎么了?感谢您的回复。

1 个答案:

答案 0 :(得分:0)

在查询中

for $x in //book 
where $x//xref/@type='Fiction'
and
$x//xref=('070185UL5','070185UJ0')
return $x

你打算说吗

(1)“必须至少有一个xref,其@type为'Fiction',且至少有一个外部参照,其值为'070185UL5'或'070185UJ0'”

或者你打算说

(2)“必须至少有一个xref,其@type为'Fiction'且其值为'070185UL5'或'070185UJ0'”

目前你在说(1)。如果你想说(2)那么查询应该是

for $x in //book 
where $x//xref[@type='Fiction' and .=('070185UL5','070185UJ0')]
return $x

您可以简化为XPath表达式

//book[.//xref[@type='Fiction' and .=('070185UL5','070185UJ0')]]

使用您提供的数据,两个查询会得到相同的结果,但如果数据不同,则可能会得到不同的结果。