Я использую официальную документацию: http://docs.basex.org/wiki/Commands#String_Syntax, и мне не удалось найти список логических операторов. Я хочу иметь возможность запрашивать text contains 'A' or 'B'
.
В том же духе я также пытаюсь выяснить, как ограничить количество возвращаемых результатов, и я пытаюсь найти хорошее руководство по созданию таблиц отношений в BaseX.
Вот с чем я работаю... Я понял, как сделать "или", но я еще не понял, как передавать переменные для разных целей.
let $items := ('Creditcard', 'Money order')
for $item score $s in doc('xmark')//item
[payment contains text "$items" using stemming using case sensitive]
order by $s descending
return <item ranking= '{ $s }'>{ $item/payment/text() }</item>
-Редактировать-
Теперь посмотрим на этот код, основанный на существующем ответе:
let $items := ('Creditcard', 'Money order')
for $item in descendant::*:$item | descendant-or-self::*[text() contains text "$item"] | .//item//payment[descendant-or-self::node()/@*:lang = "bnt"][descendant-or-self::node()/@*:lang = "afr"][descendant-or-self::node()/@*:lang = "eng"][descendant-or-self::node()/@*:lang = "chi"]
return <payment>{ .//item//payment/text() }</payment>
<buyer_name>{ .//item//buyer/text() }</buyer_name>
-Редактировать-
Еще одна попытка:
let $list := doc('xmark')
return for $p in $list/payments/item/payment-method[text() = 'Creditcard']
return $p//text()
Возвращает 0 результатов. Просто пытаюсь получить «Кредитную карту», значение «способ оплаты» из текста. По сути, я не смог найти последовательных или успешных примеров.
-Редактировать-
Самая последняя попытка очень близка; однако, когда я применяю его к базе данных, к которой я действительно пытаюсь получить доступ, а не к образцу базы данных BaseX, я получаю особую ошибку:
через http://basex.org/products/live-demo/
документ('тест'):=
<item>
<item_number>1171270</item_number>
<seller_info>
<seller_company_id>6356</seller_company_id>
<seller_rating>C31</seller_rating>
<seller_rating>T150 hr.</seller_rating>
</seller_info>
<product_info>
<unit>2022</unit>
<sinfo>55 cases</sinfo>
<sinfo>Yu-gi-oh trading card pack</sinfo>
<sinfo>.45kg per unit</sinfo>
<sinfo>24.7500kg shipment</sinfo>
</product_info>
<product_info>
<unit>9291</unit>
<sinfo>7 units</sinfo>
<sinfo>Naruto, Classic, action figure</sinfo>
<sinfo>1.8kg per unit</sinfo>
<sinfo>12.6kg shipment</sinfo>
</product_info>
</item>
0: напишите свой собственный запрос... :=
let $doc := doc('test')
for $v in $doc//item
where contains($v//seller_rating,'C31')
return $v//product_info/sinfo
Возвращает:
Error:
Stopped at line 3, column 39: [XPTY0004] Single item expected, (element seller_rating { ... }, element seller_rating { ... }) found.
Не могу сказать, что не ожидал столкнуться с такой проблемой. К сожалению, я не форматировал XML-документ, и он весь ужасно отформатирован, вот так, что является одной из причин, по которой я пытаюсь получить к нему доступ (чтобы реструктурировать его). Следующий вопрос: "как настроить таргетинг на значения с одинаковым узлом в XQuery"?
[payment contains text 'Creditcard' using stemming using case sensitive or payment contains text 'Money order' using stemming using case sensitive]
работает для или, но это очень многословно. Кроме того, это ограничивает мои возвращаемые значения. Я хотел бы иметь возможность вернуть наборCreditcard
в качестве одной переменной иMoney order
в качестве другой. - person Wolfpack'08   schedule 15.09.2012$items
в сценарии, который я написал в своем примере, верно? - person Wolfpack'08   schedule 15.09.2012