0

次のドキュメントを解析するためのXMLプル解析アプローチを検討しています。

<layout>
  <button height="20" width="20" text="Hello world" />
  <image height="10" width="10" img="foo.png" />
</layout>

対応するJavaオブジェクトを生成します。私は抽象基本クラスComponentを持っています。その責任は、高さと幅を持つジェネリックComponentを記述することであり、渡された「ノード」(より正確には、パーサー)の対応するXML属性を解析することによってこれらの値を取得できるはずです。ノードを指す)。

Componentから派生して、2つの具体的なクラスButtonとImageがあり、それぞれテキストと画像を追加します。XML属性からこれらの値を初期化できる必要があります。

これは、クラスの実装のスケッチです。

public abstract class Component {
    public int width;
    public int height;

    public Component(XmlPullParser parser) {
        //TODO ???
    }
}

public class Button extends Component {
    public String text;

    public Button(XmlPullParser parser) {
        super(parser);
        //TODO ???
    }
}

public class Image extends Component {
    public String img;

    public Image(XmlPullParser parser) {
        super(parser);
        //TODO ???
    }
}

問題は、この動作を取得するために解析を実装する方法です。私の主な懸念は、パーサーでnextTag()を呼び出すと、パーサー自体が「変更」されることです。したがって、Componentスーパークラスがノード全体を読み取って幅と高さを取得する場合(super()コンストラクターを呼び出す)、派生クラスはどのようにして同じノードを読み取ってそれ自体を初期化できますか?

ありがとう ;)

4

1 に答える 1

0

私は最終的にこのパスを放棄し、メモリ内のオブジェクトツリーを構築することを選択しました。ここでの実装:http://www.bearcave.com/software/java/xml/treebuilder.htmlは、内部でXMLPull解析を使用し、メモリをほとんど消費しないため、非常に高速です。

于 2012-06-24T13:27:15.043 に答える