2012-06-17 2 views
0

Я смотрю на XML Вытащит разбор подхода разобрать следующий документ:XMLPull - Split разбор узла между базовым классом и производными классами

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

и производить соответствующие объекты Java. У меня есть компонент абстрактного базового класса, ответственность которого будет заключаться в описании общего компонента, имеющего высоту и ширину, и он должен иметь возможность получать эти значения, анализируя соответствующие XML-атрибуты прошедшего «узла» (точнее, синтаксический анализатор указывая на узел).

Производя из компонента, у меня есть два конкретных класса 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()), как производный класс мог прочитать один и тот же узел для инициализации?

Спасибо;)

ответ

0

я в конце концов отказался от этого пути и решили построить дерево объектов в памяти. Реализация здесь: http://www.bearcave.com/software/java/xml/treebuilder.html быстро пылает, так как использует XMLPull для внутреннего анализа и потребляет очень мало памяти.

Смежные вопросы