2011-02-05 19 views
6

XMLファイルがあり、いくつかのエンティティでグラフを作成してから、画像、JPGまたはPNGに保存します。JavaでXMLファイルからグラフ画像(png、jpg ..)を作成します

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> 

と出力は次のようになります。

enter image description here

+0

http://www.graphviz.org/はあなたが喜んで実装するよ何すでに提供しているようです。 – Rekin

答えて

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解析は失敗します。

some boxes

あなたが好きな描画する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); 
} 
+0

ありがとうございました! XMLファイルを解析してGraphViz表現を出力した後、最後にGraphVizを使ってピクチャを追加してjavaというクラスを見つけました。http://www.loria.fr/~szathmar/off/projects/java/GraphVizAPI/index .php#history – alibenmessaoud

6

私はXML出力にこのようなGraphvizのDOT表現を解析したい:

digraph { 
    Tove -> Jani 
    Jani -> Bill 
    Bill -> John 
} 

それから私は」 d ProcessRunnerを使用してJavaから実行可能なGraphvizドットを呼び出します。

dot -Tpng -o file.png file.dot 

さらに詳しい情報はをご覧ください。

0

ありがとうございました!

私はGraphVizを表現、Follow this link XMLファイルと出力を解析した後、最終的に画像をextraxtするGraphVizをと、企業のJavaでクラスを見つけました。よく2つの方法のMcDowell私はXMLファイルを簡単に解析することができます。

敬具

関連する問題