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

Node.js中使用cheerio提取SVG多path元素d属性并合并的问题

问题原因&解决方法

你原有代码的问题出在两处:

  • 遍历目标错误:所有<path>节点都嵌套在<g>标签下,直接遍历<svg>的直接子元素只会拿到<g>节点,拿不到内部的<path>节点
  • 属性读取逻辑错误:循环内每次都调用$('path').attr('d'),cheerio中对包含多个元素的选择集调用attr()方法,只会返回第一个匹配元素的对应属性值,所以每次输出的都是第一个路径的d值

修正后的可实现需求的代码如下:

const fs = require('fs')
const cheerio = require('cheerio')

fs.readFile(path_to_svg, 'utf8', (err, data) => {
  if (err) return console.log(err)
  const $ = cheerio.load(data, { xmlMode: true })
  const pathDArr = []
  // 直接选中所有path节点遍历
  $('path').each(function (index, element) {
    // 读取当前遍历到的path节点的d属性存入数组
    pathDArr.push($(element).attr('d'))
  })
  // 拼接为完整的路径字符串
  const combinedPathD = pathDArr.join(' ')
  console.log(combinedPathD)
})

额外提示:如果后续要把合并后的路径生成新SVG使用,需要注意继承原有<g>标签上的transform、fill等属性,避免出现样式、位置渲染错位的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:54:05