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

如何通过文件中的Xidel模式将HTML列表转为JSON对象数组?

解决Xidel提取HTML列表生成JSON对象数组的问题

嘿,我来帮你搞定这个问题!你遇到的核心问题应该是没有把提取到的字段结构化包装成对象,再收集成数组——Xidel不会自动把零散的变量输出转换成JSON对象数组,得明确告诉它怎么构造结构。下面是具体的解决步骤和例子:

1. 确保你的提取模式是结构化的

首先,你需要把每个HTML列表项映射成一个JSON对象,再把所有对象组合成数组。比如假设你的HTML列表长这样:

<ul class="product-list">
  <li>
    <h3 class="product-name">无线耳机</h3>
    <p class="price">¥299</p>
  </li>
  <li>
    <h3 class="product-name">蓝牙音箱</h3>
    <p class="price">¥199</p>
  </li>
</ul>

方式一:直接在命令行写提取规则

用object({...})构造单个对象,再用array(...)包裹成数组,配合--output-format=json参数:

xidel your-file.html --extract "array(//ul[@class='product-list']/li/object({
  'name': h3[@class='product-name']/text(),
  'price': p[@class='price']/text()
}))" --output-format=json

方式二:从文件读取提取模式

如果你的规则比较复杂,把它存成一个XQuery文件(比如extract-rule.xq):

// 提取所有列表项,每个项转成JSON对象,再组成数组
array(
  //ul[@class='product-list']/li/object({
    'name': h3[@class='product-name']/text(),
    'price': p[@class='price']/text()
  })
)

然后执行命令:

xidel your-file.html --extract-file extract-rule.xq --output-format=json

2. 为什么--output-format=json-wrapped没效果?

json-wrapped参数的作用是把多个独立的结果包装成JSON数组,但如果你的提取规则只是输出零散的变量(比如单独提取name和price),它只会把这些变量值按顺序塞到数组里,而不是组成{name:..., price:...}的对象。只有当你的提取结果是对象序列时,json-wrapped或者直接用json格式才会生成你想要的对象数组。

3. 排查小技巧

  • 先测试你的提取规则是否能正确匹配到所有列表项:可以先去掉object和array,只写//ul[@class='product-list']/li,看Xidel是否返回正确的节点数量。
  • 检查XQuery语法:object({...})里的键要用单引号或双引号,键值对之间用逗号分隔,不要写错。
  • 如果还是有问题,可以加上--verbose参数,查看Xidel的执行日志,看看哪里出了问题。

内容的提问来源于stack exchange,提问作者Mr. Curious

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:47:35