基于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
相关产品推荐
相关产品推荐

