Bạn có thể trích xuất các tên bằng một trong những vô số các thư viện XML Java. Dưới đây là một ví dụ sử dụng XPath từ một Java DOM:
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;
}
Lưu ý: nó có thể là một lỗi đánh máy, nhưng XML của bạn không cũng được hình thành - giá trị thuộc tính phải được trích dẫn. Phân tích cú pháp XML sẽ thất bại nếu không.
Bạn có thể sử dụng AWT API để vẽ bất cứ điều gì bạn muốn:
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;
}
}
Mã này chỉ thu hút những tên tuổi với một số hộp xung quanh họ. Tôi chắc chắn rằng offsets của tôi là tất cả các nơi, nhưng bạn có thể có được ý tưởng.
Có một imageio API rằng có thể lưu trong một vài định dạng dữ liệu phổ biến:
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);
}
Dường như http://www.graphviz.org/ cung cấp đã gì Bạn sẽ sẵn sàng để thực hiện. – Rekin