При использовании жестко закодированного значения работает только парсер XML - PullRequest
0 голосов
/ 16 ноября 2011

Это моя программа, Я использую STAX Parser для разбора XML-документа. Когда я использую жестко закодированное значение, то только его работающее (item.account = "sss";) Но когда-нибудь, если я попытаюсь использовать item.account = eventReader.getElementText (); Размер списка 0 (Элементы списка = новый ArrayList ();)

import java.io.StringReader;
import java.util.*;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;

public class Pavan {
    static final String DATE        = "date";
    static final String ITEM        = "item";
    static final String MODE        = "mode";
    static final String UNIT        = "unit";
    static final String CURRENT     = "current";
    static final String INTERACTIVE = "interactive";

    @SuppressWarnings({ "unchecked", "null" })
    public static void main(String args[]) {
        List<Position> items = new ArrayList<Position>();
        try {
            String documentAsString = "<request>\r\n" + "<accountid>1234</accountid>\r\n" + "<accountid>234</accountid>\r\n" + "</request>";

            StringReader stringReadertext = new StringReader(documentAsString);
            XMLInputFactory inputFactory = XMLInputFactory.newInstance();
            XMLStreamReader reader = inputFactory.createXMLStreamReader(stringReadertext);

            XMLEventReader eventReader = inputFactory.createXMLEventReader(reader);
            Position item = null;

            while (eventReader.hasNext()) {
                XMLEvent event = eventReader.nextEvent();

                if (event.isStartElement()) {
                    StartElement startElement = event.asStartElement();
                    if (startElement.getName().toString().equals("accountid")) {

                        item = new Position();

                        item.account = "sss";
                        //item.account = eventReader.getElementText();
                    }

                }
                // If we reach the end of an item element we add it to the list
                if (event.isEndElement()) {
                    EndElement endElement = event.asEndElement();
                        if (endElement.getName().toString().equals("accountid")) {
                        items.add(item);
                    }
                }

            }
        } catch (XMLStreamException e) {
            e.printStackTrace();
        }
        System.out.println(items.size());
    }

}


class Position
{
String account ;
}

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

Потому что ваше конечное событие было "съедено" и if (event.isEndElement ()) никогда не запускался.Однако при жестком коде «if (event.isEndElement ())» срабатывает из-за отсутствия функции «EventReader.getElementText ()».

1 голос
/ 16 ноября 2011

Я считаю, что getElementText() потребляет конечное событие, поэтому ваш второй блок if никогда не вводится. документы по этому методу немного сбивают с толку.

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