如何在 XQuery 的 "where" 子句中使用两个条件
How to use two conditions in "where" clause in XQuery
我正在尝试仅提取那些 <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只获取匹配“070185UL5”的第一本书信息。我希望它能同时获取两者。怎么了?感谢您的回复。
查询中
for $x in //book
where $x//xref/@type='Fiction'
and
$x//xref=('070185UL5','070185UJ0')
return $x
你打算说
(1) "there must be at least one xref whose @type is 'Fiction' and at least one xref whose value is '070185UL5' or'070185UJ0'"
或者你打算说
(2) "there must be at least one xref whose @type is 'Fiction' and whose value is '070185UL5' or'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')]]
使用您提供的数据,两个查询给出相同的结果,但使用不同的数据,它们可能给出不同的结果。
我正在尝试仅提取那些 <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只获取匹配“070185UL5”的第一本书信息。我希望它能同时获取两者。怎么了?感谢您的回复。
查询中
for $x in //book
where $x//xref/@type='Fiction'
and
$x//xref=('070185UL5','070185UJ0')
return $x
你打算说
(1) "there must be at least one xref whose @type is 'Fiction' and at least one xref whose value is '070185UL5' or'070185UJ0'"
或者你打算说
(2) "there must be at least one xref whose @type is 'Fiction' and whose value is '070185UL5' or'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')]]
使用您提供的数据,两个查询给出相同的结果,但使用不同的数据,它们可能给出不同的结果。