Хранение объектов XML - PullRequest
       3

Хранение объектов XML

0 голосов
/ 09 июля 2011

Я создал XML-разборщик, который извлекает подробности XML:

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();

xpp.setInput(new InputStreamReader(response3.getEntity().getContent()));
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
    if(eventType == XmlPullParser.START_DOCUMENT) {
        System.out.println("Start document");
    } else if(eventType == XmlPullParser.START_TAG) {
        System.out.println("Start tag "+xpp.getName());
    } else if(eventType == XmlPullParser.END_TAG) {
        System.out.println("End tag "+xpp.getName());
    } else if(eventType == XmlPullParser.TEXT) {
        System.out.println("Text "+xpp.getText());
    }
    eventType = xpp.next();
}

При поиске в XML правильно извлекаются различные теги и т. Д.

Моя проблема в том,теперь, когда я хочу сохранить их.Основная структура состоит в том, что в нем хранится серия карточек, каждая со списком атрибутов.Внешний тег будет выглядеть примерно так: <card>, а внутри будет много атрибутов, таких как <resourceid>, <price> и т. Д.

Я хочу хранить каждую карту в удобном для доступа виде.Я думал об использовании SQlite, но у меня очень мало опыта работы с ним. Возможно ли это сделать, когда парсер шаг за шагом?


Добавлен мой класс здесь

public class SecondActivity {

        String resourceid;
        String startprice;
        String currentbid;
        String buynowprice;
        String expires;

        public String getResourceId(){
            return this.resourceid;
        }

        public String getStartPrice(){
            return this.startprice;
        }

        public String getCurrentBid(){
            return this.currentbid;
        }

        public String getBuyNowPrice(){
            return this.buynowprice;
        }

        public String getExpires(){
            return this.expires;
        }

        public void setResourceId(String resourceidin){
            this.resourceid = resourceidin;
        }

        public void setStartPrice(String startpricein){
            this.startprice = startpricein;
        }

        public void setCurrentBid(String currentbidin){
            this.currentbid = currentbidin;
        }

        public void setBuyNowPrice(String buynowpricein){
            this.buynowprice = buynowpricein;
        }

        public void setExpires(String expiresin){
            this.expires = expiresin;
        }
    }

Я сейчаспросто вызовите каждое утверждение, т. е. набор внутри, где анализатор находит значения тега, затем я вызываю хранилище, передавая ему этот объект?Как мне тогда очистить все значения внутри объекта?Спасибо за помощь, очень признателен.

Попытка найти начало карты, как определено

, добавила это в мой код:

else if(eventType == XmlPullParser.START_TAG) {

                 if (xpp.getName() == "auctionInfo"){
                     this.setMyflag(1);
                     System.out.println("IN THE IF FLAG IS SET TO 1");
                 }

                 System.out.println("Start tag "+xpp.getName());

К сожалению, это никогдавходит в if, и я озадачен, почему!

1 Ответ

0 голосов
/ 09 июля 2011

Конечно, вы можете.Некоторые сведения о том, как использовать SQLite в Android, см. здесь .

. Вы можете (например) создать класс, содержащий информацию для одного из ваших <card>-тегов (длясоздать что-то вроде пакета данных для одной карты), а затем выполнить вставку базы данных в другом методе, который берет объект этого класса и обрабатывает его.


Ваш <card> -элемент будет иметь несколькодочерние элементы или атрибуты.Это те поля, которые вы для вашего нового класса.Когда синтаксический анализатор находит один из этих дочерних элементов / атрибутов, вы задаете соответствующее поле в своем классе.

Когда синтаксический анализатор находит следующий <card> -элемент, вы сначала вызываете свой storeCardInDB() -метод (или как вы это называете) и передать ему заполненный объект.

Метод возьмет поля из вашего объекта, свяжет их с PreparedStatement (например) и отправит его в базу данных.

Это делается для каждого <card> -элемента в вашем XML-файле.


Хорошо, есть разница в сравнении двух int с и двух String с.Если вы хотите узнать, соответствует ли содержимое строки содержимому другой строки, вам необходимо использовать equals() -метод:

if ( xpp.getName().equals("auctionInfo") ) {[...]}

Вот хорошая статья который должен очистить фон этого поведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...