2009-07-02 7 views
2

私はjavaを使用してXMLファイルを書く必要があります。その内容は地図から書かれている必要があります。地図はキーとしてのアイテムとそのマーケットシェアを値として含みます.2つのタグと共にXMLファイルを構築する必要があります。このXMLを使用してamcharts.phanを使用して円グラフを作成します。誰でも既存のコードを使用できますか? cadrianの答えに追加するにはXMLをJavaを使用

<xml> 
<pie> 
    <slice title="<Map key1>"><Map Value1></slice> 
    <slice title="<Map key2>"><Map Value2></slice> 
    <slice title="<Map key1>"><Map Value3></slice> 
    . 
    . 
    . 
    <slice title="<Map keyn>"><Map Valuen></slice> 
</pie> 

答えて

2

標準APIを使用してこれを行うにはいくつかの方法があります。 (冗長性とファクトリパターンについて、独自の警告を挿入します。)

あなたがデータエンコードするためにXMLStreamWriterを使用することができます:あなたが構築DOM document(推奨しない)とすることを放射する、または可能性があり、また

XMLOutputFactory factory = XMLOutputFactory 
    .newInstance(); 
XMLStreamWriter writer = factory.createXMLStreamWriter(
    stream, "UTF-8"); 
try { 
    writer.writeStartDocument("UTF-8", "1.0"); 
    writer.writeStartElement("pie"); 
    for (Entry<String, String> entry : map.entrySet()) { 
    writer.writeStartElement("slice"); 
    writer.writeAttribute("title", entry.getKey()); 
    writer.writeCharacters(entry.getValue()); 
    writer.writeEndElement(); 
    } 
    writer.writeEndElement(); 
    writer.writeEndDocument(); 
} finally { 
    writer.close(); 
} 

をマーシャル/非マーシャルデータへのバインドJAXBを使用してください(tutorial)。

サンプル注釈付きJAXBオブジェクト:

@XmlRootElement(name = "pie") 
public class Pie { 

    @XmlElement(name = "slice") 
    public List<Slice> slices = new ArrayList<Slice>(); 

    public Pie() { 
    } 

    public Pie(Map<String, String> sliceMap) { 
    for (Map.Entry<String, String> entry : sliceMap 
     .entrySet()) { 
     Slice slice = new Slice(); 
     slice.title = entry.getKey(); 
     slice.value = entry.getValue(); 
     slices.add(slice); 
    } 
    } 

    static class Slice { 
    @XmlAttribute 
    public String title; 
    @XmlValue 
    public String value; 
    } 

} 

テストコード:

Map<String, String> slices = new HashMap<String, String>(); 
slices.put("Title 1", "100"); 
slices.put("Title 2", "200"); 

Pie pie = new Pie(slices); 
JAXB.marshal(pie, System.out); 

同じジョブと、さまざまなテンプレートオプションを行うことができ、サードパーティのAPIをホストがありますが、すでに言及されています。

+0

すばらしい... Marvellous..voted you – Harish

1

:またFreeMarkerのようなテンプレートエンジンを使用することができます。これにより、XMLをJavaコード外のテンプレートとして使用し、Javaオブジェクトとテンプレート内のXML間のバインディングを実行できます。

+0

はい、もちろんそうです。または速度。 – cadrian

2

エンティティエンコーディングを心配する必要があるので、私はXMLを直接書くことに注意します。

<>または&のテキストコンテンツを直接書き込むと、無効なXMLが生成されます。 VelocityとFreemarkerを使用する場合も同様です。

XMLを直接書き込む場合は、すべてのテキストコンテンツが適切にエンコードされていることを確認してください。これはApache Commonsとを使用して行うことができます。

EDIT:あなたのXML要件をもう一度見れば、XStreamが役立つかもしれません。 java.util.Mapを持っている場合、XStreamはこれをまっすぐに書くことができます。要素名を変更するには、aliasingを参照する必要がありますが、検討する価値があります。

関連する問題