You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于BaseX的XQuery条件判断:为书籍按价格区间打标签

用XQuery给书籍添加价格分类标签

以下是在BaseX中实现需求的具体方案:

示例XML(需确保有根元素)

首先将你提供的XML片段包裹根元素(XML规范要求单一根节点):

<books>
  <book>
    <title>Book 1</title>
    <price>15.99</price>
  </book>
  <book>
    <title>Book 2</title>
    <price>5.99</price>
  </book>
  <book>
    <title>Book 3</title>
    <price>5</price>
  </book>
</books>

XQuery实现代码

方式1:读取外部XML文件

假设你将上述XML保存为books.xml,执行以下XQuery:

for $book in doc("books.xml")/books/book
let $price := xs:decimal($book/price)
return
  <book>
    {$book/title}
    {$book/price}
    <category>
      {
        if ($price < 10) then "cheap"
        else if ($price >= 10 and $price < 20) then "average"
        else "premium"
      }
    </category>
  </book>

方式2:直接在查询中构造XML

如果不想保存文件,可直接在BaseX编辑器中运行:

let $books :=
  <books>
    <book>
      <title>Book 1</title>
      <price>15.99</price>
    </book>
    <book>
      <title>Book 2</title>
      <price>5.99</price>
    </book>
    <book>
      <title>Book 3</title>
      <price>5</price>
    </book>
  </books>
for $book in $books/book
let $price := xs:decimal($book/price)
return
  <book>
    {$book/title}
    {$book/price}
    <category>
      {
        if ($price < 10) then "cheap"
        else if ($price >= 10 and $price < 20) then "average"
        else "premium"
      }
    </category>
  </book>

代码说明

  • xs:decimal($book/price):将price的文本值转换为十进制数值,避免字符串比较的误差
  • 嵌套if-then-else逻辑:按价格区间匹配分类标签,你可以根据实际需求调整区间阈值(比如把中等区间改成10-18)
  • 构造新的book元素:保留原有的title和price节点,新增category节点存储分类结果

内容的提问来源于stack exchange,提问作者user24847422

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 17:52:23