我有一个学生卡SVG,其中有名称,id和其他字段,我想通过Java编辑,因为用户使用GUI输入了它们。
我已经使用Batik成功解析了SVG,但是打开它时看不到在SVG文件中所做的更改。
String parser = XMLResourceDescriptor.getXMLParserClassName(); SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser); String uri = "card.svg"; try { Document doc = f.createDocument(uri); NodeList nodeList = doc.getChildNodes(); Element svg = doc.getElementById("name"); svg.setTextContent("Your Name"); System.out.println(svg.getTextContent()); } catch (IOException e) { e.printStackTrace(); }
当我使用以下命令打印出SVG元素的值之一时
System.out.println(svg.getTextContent());
它已更改,但是当我在记事本中打开SVG时是相同的。
SVG
<text x="759" y="361" id="name" class="fil3 fnt3">STUDENT</text>
其他更新:解决了
File file = new File("new.svg"); FileWriter fWriter = new FileWriter(file); XmlWriter.writeXml(svg, fWriter, false); // Most crucial part, It wasn't working just because of flush fWriter.close();
似乎您在这里没有使用任何特定的SVG功能,只是一些常规XML解析。解析文档的结果createDocument是内存中有一个DOM,但这不会自动将您的更改写出到文件中。您必须明确地做到这一点。 使用org.apache.batik.svggen.XmlWriter类是序列化之一。 您需要打开一个文件进行写入,并将FileWriter其与Document节点一起传递给该文件。
createDocument
org.apache.batik.svggen.XmlWriter
FileWriter
Document