我有一个XML文件,我想用一些实体创建一个图形,然后将这个图形存储在图像,JPG或PNG中。
那么Java中的库是否会这样?或者通过解析XML文件和??? ???
来解决一些问题这是一个例子 XML文件:
<?xml version="1.0"?>
<process>
<p n="1">Tove</p>
<p n="2">Jani</p>
<p n="2">Bill</p>
<p n="4">John</p>
</process>
输出将是这样的:
答案 0 :(得分:7)
您可以使用众多Java XML库之一提取名称。以下是使用Java DOM中的XPath的示例:
private static List<String> findNames(Document doc)
throws XPathExpressionException {
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList nodes = (NodeList) xpath.evaluate("/process/p", doc,
XPathConstants.NODESET);
List<String> names = new ArrayList<String>();
for (int i = 0; i < nodes.getLength(); i++) {
names.add(nodes.item(i).getTextContent());
}
return names;
}
注意:它可能是拼写错误,但您的XML格式不正确 - 必须引用属性值。否则,XML解析将失败。
您可以使用AWT API绘制您想要的任何内容:
private static final int BORDER = 1;
private static final int PADDING = 2;
private static final int SPACER = 5;
private static void draw(Graphics2D g, List<String> names) {
FontMetrics metrics = g.getFontMetrics();
Rectangle box = new Rectangle(1, 1, 0, 0);
box.height = metrics.getHeight() + (PADDING * 2);
g.setColor(Color.WHITE);
for (String name : names) {
box.width = metrics.stringWidth(name) + (PADDING * 2);
g.drawString(name, box.x + BORDER + PADDING, PADDING + BORDER +
metrics.getHeight());
g.drawRect(box.x, box.y, box.width, box.height);
box.x += box.width + (BORDER * 2) + SPACER;
}
}
这段代码只是用它们周围的方框绘制名称。我确定我的抵消都到处都是,但你可能会明白这一点。
有一个imageio API可以保存在一些流行的数据格式中:
private static void save(List<String> names, File file) throws IOException {
BufferedImage image = new BufferedImage(600, 50, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
try {
draw(g, names);
} finally {
g.dispose();
}
ImageIO.write(image, "png", file);
}
答案 1 :(得分:6)
我将解析XML并输出如下的Graphviz DOT表示:
digraph {
Tove -> Jani
Jani -> Bill
Bill -> John
}
然后我使用ProcessRunner从Java调用Graphviz点可执行文件:
dot -Tpng -o file.png file.dot
有关详细信息,请参阅http://graphviz.org。
答案 2 :(得分:0)
谢谢大家!
我在java中发现类, GraphViz ,在解析XML文件并输出GraphViz表示Follow this link之后最终将图像外加到文本中。使用 McDowell 这两种方法,我可以轻松解析XML文件。
祝你好运