2017-05-03 11 views
1

私はアクティビティクラスを持っています。子サブアクティビティのリストを持っています。これらのサブアクティビティのそれぞれは独自のリストを持っています。Java:フィールドとして他のオブジェクトのリストを持つXMLオブジェクトを解析する

public class Activity 
{ 
    private Activity parent;   
    private ArrayList<Activity> children = new ArrayList(); 
    private String name; 
} 

次のようなもののように見えるXMLファイルにそれを解析するefficent方法があります:

<Activity name="1"> 
<children> 
    <Activity name="2> 
    <children> 
     <Activity name="3"> 
    </children> 
</children> 
<Activity name ="4"> 

などは?

+0

あなたが探しているのはシリアライゼーションで、JAXBから始まるXMLシリアル化のいくつかのオプションがあります:https://jaxb.java.net/ –

答えて

1

最も簡単なシリアライズ方法はXMLStreamWriterです。これは、JAXBなどのより複雑なモデルに適したPOJOを入力として取り込むのではなく、POJOをエンドポイントとしてXML形式に変換することのみを目的としています。

ライターをファイルにインスタンス化して書き留めます。

XMLStreamWriter writer; //instantiate this based on your output format, see the tutorial for example 

次に、この再帰的メソッドを使用してXMLを設定できます。

あなたは空の「子」ノードをしたい場合、あなたはそうでif文を行う、とすることができますに応じて、
public void writeActivity(Activity activity) { 
    writer.writeStartElement("activity"); 
    writer.writeAttribute("name", activity.getName()); 

    writer.writeStartElement("children"); 
    for(Activity child : activity.getChildren()) { 
     writeActivity(child); 
    } 
    writer.writeEndElement(); //ends element children 

    writer.writeEndElement(); //ends element activity 
} 

+0

ありがとう!それがまさに私が探しているものです。 –

+0

@VadimShmyrovこれがあなたの質問に答えるなら、それを合格とマークしてください:) – Compass

関連する問題