Пустые теги в XML вызывают проблемы в моем парсере - PullRequest
0 голосов
/ 28 января 2020

Я анализирую 800 xml файлов в секунду с анализатором StAX. Существует небольшая вероятность того, что один из тегов в этих xml файлах окажется пустым, как <tag></tag> вместо <tag>info</tag>. Всякий раз, когда это происходит, я получаю следующую ошибку:

Exception in thread "Thread-1" java.lang.ClassCastException: com.sun.xml.internal.stream.events.EndElementEvent cannot be cast to javax.xml.stream.events.Characters
    at com.sun.xml.internal.stream.events.DummyEvent.asCharacters(Unknown Source)
    at client$1.run(maini.java:78)

Что я могу сделать, чтобы поймать эту ошибку?

Редактировать: Код:

                          while (loop == true) {
                                    XMLEvent nextEvent = reader.nextEvent();
                                    //System.out.println(nextEvent);
                                    if (nextEvent.isStartElement()) {
                                        StartElement startElement = nextEvent.asStartElement();
                                        switch (startElement.getName().getLocalPart()) {
                                            case "WEATHERDATA":

                                                Attribute station2 = startElement.getAttributeByName(new QName("station2"));
                                                if (station2 != null) {
                                                    System.out.println(((javax.xml.stream.events.Attribute) station2).getValue());
                                                }
                                                break;
                                            case "MEASUREMENT":
                                                break;
                                            case "STN":
                                                nextEvent = reader.nextEvent();
                                                station = nextEvent.asCharacters().getData();
                                                output += station + ",";
                                                break;
                                            case "WNDDIR":
                                                nextEvent = reader.nextEvent();
                                                output += nextEvent.asCharacters().getData() + "\r\n";
                                                break;
                                            default: 
                                                nextEvent = reader.nextEvent();
                                                output += nextEvent.asCharacters().getData() + ",";
                                                break;

                                        }
                                    }
                                    if (nextEvent.isEndElement()) {
                                        EndElement endElement = nextEvent.asEndElement();
                                        if (endElement.getName().getLocalPart().equals("WEATHERDATA")) {
                                            loop = false;
                                        }
                                        else if (endElement.getName().getLocalPart().equals("MEASUREMENT")) {                                           
                                            String finaloutput = output;
                                            String finalstation = station;
                                            Runnable task = () -> {
                                                fileWriter(finaloutput, pathfile +finalstation+ ".txt");
                                            };
                                            executor.execute(task);
                                            output = "";
                                        }
                                    }

Это дает ошибка в строке "output += nextEvent.asCharacters().getData() + ",";.

...