如何使用nodejs将svg节点保存到文件?

Zee*_*Zee 1 svg node.js d3.js

我正在通过一个小帮手包使用d3:https://www.npmjs.com/package/d3-node

我使用d3-node创建了我的svg文件,这是代码.

const D3Node = require('d3-node')

var d3n = new D3Node()
var svg = d3n.createSVG()
    .style("width","1920px")
    .style("height","1080px") 
    .attr("preserveAspectRatio","true")
.html(firstTemplate)
.append("myCustomTag")
Run Code Online (Sandbox Code Playgroud)

在此之后,我不知道如何保存输出.主要问题在于myCustomTag.

console.log(d3n.d3Element.select("svg").node().innerHTML)
Run Code Online (Sandbox Code Playgroud)

这行应该输出我的svg,它确实输了,除了那个myCustomTag变成了mycustomtag我的svg 变坏了.

我试过了select("svg").node().outerHTML,select("svg").html()innerText,我找不到任何东西.

在这种情况下我不能使用innerHTML,有没有办法直接从d3变量存储svg文件?

Rob*_*son 5

您可以使用xmlserializer,因为SVG是XML,XML是区分大小写的.这样的东西适合我:

const D3Node = require('d3-node');
const xmlserializer = require('xmlserializer');

const d3n = new D3Node();
var svg = d3n.createSVG()
    .style("width","1920px")
    .style("height","1080px")
    .attr("preserveAspectRatio","true");

svg.append("myCustomTag");

console.log(xmlserializer.serializeToString(svg.node()));
Run Code Online (Sandbox Code Playgroud)

HTML不区分大小写,因此当您尝试使用HTML方法序列化事物时,您不一定会获得所需的内容.