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

使用Rust SVG crate渲染SVG时仅显示一个元素的问题

问题解决:SVG仅显示一个路径的原因及修复
  • 问题根源:生成的SVG代码存在标签嵌套错误
    你提供的SVG代码里,第一个<path>标签没有用自闭合语法(/>)结束,反而把第二个<path>嵌套在了第一个内部。SVG规范里<path>元素不能包含其他图形元素,所以第二个路径被当作无效内容直接忽略,自然显示不出来。

  • 修正后的SVG代码:

    <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
      <path d="M20,20 l0,50 l50,0 l0,-50 z" fill="none" stroke="black" stroke-width="3"/>
      <path d="M10,30 l0,50 l50,0 l0,-50 z" fill="none" stroke="black" stroke-width="3"/>
    </svg>
    
  • Rust代码中的注意事项:
    用Rust的SVG crate(比如svg)生成SVG时,要保证每个路径都是独立的根节点子元素,不能嵌套。举个简单的实现示例:

    use svg::node::element::{Path, SVG};
    use svg::node::element::path::Data;
    
    fn main() {
        // 创建第一个矩形路径
        let path1 = Path::new()
            .set("d", Data::from("M20,20 l0,50 l50,0 l0,-50 z"))
            .set("fill", "none")
            .set("stroke", "black")
            .set("stroke-width", 3);
    
        // 创建第二个偏移后的矩形路径
        let path2 = Path::new()
            .set("d", Data::from("M10,30 l0,50 l50,0 l0,-50 z"))
            .set("fill", "none")
            .set("stroke", "black")
            .set("stroke-width", 3);
    
        // 构建SVG根节点,将两个路径作为子元素添加
        let svg = SVG::new()
            .set("viewBox", "0 0 100 100")
            .set("xmlns", "http://www.w3.org/2000/svg")
            .add(path1)
            .add(path2);
    
        // 输出最终SVG代码
        println!("{}", svg);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:30:07