2015-02-13 5 views
1

При анализе XMl, если XML имеет один родительский тег, то он работает нормально. Если у него несколько родительских тегов, он бросает следующее исключение.IllegalStateException при анализе XML?

java.lang.IllegalStateException: Current state END_ELEMENT is not among the statesCHARACTERS, COMMENT, CDATA, SPACE, ENTITY_REFERENCE, DTD valid for getText() 
     at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.getText(Unknown Source) 
     at com.axxonet.queue.xmlParserValues.parse(xmlParserValues.java:37) 
     at com.axxonet.queue.xmlParserValues.main(xmlParserValues.java:19) 

Если формат XML имеет эту структуру, то он работает нормально.

<Address> 
    <Name>Rahul</Name> 
    <ID>2345</ID> 
    <City>Pune</City> 
    <Street>Gandhi Nagar</Street> 
</Address> 

Если значение любого поля равно нулю тег генерировать как <phone/> Тогда это время при разборе я получаю следующее исключение.

<Address> 
    <Name>Rahul</Name> 
    <ID>2345</ID> 
    <City/> 
    <Street>Gandhi Nagar</Street> 
</Address> 

Я попытался добавить IllegalStateException исключение в блоке catch еще бросает исключение.

Мой код выглядит следующим образом,

Map<String, String> map = new HashMap<String, String>(); 
      XMLStreamReader xr; 
       try { 
         xr = XMLInputFactory.newInstance().createXMLStreamReader(new FileInputStream("E:/Softwares/eclipse/reqOutputFile.xml")); 
         while(xr.hasNext()) { 
           int e = xr.next(); 
           if (e == XMLStreamReader.START_ELEMENT) { 
            String name = xr.getLocalName(); 
            xr.next(); 
            String value = null; 

            try{ 
              value = xr.getText(); 
            } 
            catch(IllegalStateException ex) 
            { 
              ex.printStackTrace(); 
            } 
       map.put(name, value);    
           } 
          } 
       } catch (FileNotFoundException e1) { 
         e1.printStackTrace(); 
       } catch (XMLStreamException e1) { 
         e1.printStackTrace(); 
       } catch (FactoryConfigurationError e1) { 
         e1.printStackTrace(); 
       } 

Как мы обрабатываем исключение?

ответ

1

Я думаю, что ваш XML должен быть, как этот

<Root> 
    <Address> 
     <Name>Rahul</Name> 
     <ID>2345</ID> 
     <City>Pune</City> 
     <Street>Gandhi Nagar</Street> 
    </Address> 
    <ContactAddress> 
     <phone>223363</phone> 
     <mobile>9988776655</mobile> 
    </ContactAddress> 
</Root> 
+0

Полезно помнить, что правильно сформированный XML должен иметь корневой тег. –

+0

На самом деле я получил вопрос. Это не проблема с родительскими тегами. Я мой xml один подал с нулевым значением, например, Так что по этой причине он бросает исключение. Как я могу его решить? – Vinod

+0

обновил мой вопрос. Любые sugestions – Vinod

1

Изменить код, чтобы сделать следующее использовать метод getElementText() вместо того, чтобы пытаться продвинуться в текстовый узел, который не может существовать вместо:

int e = xr.next(); 
if (e == XMLStreamReader.START_ELEMENT) { 
    String name = xr.getLocalName(); 
    // xr.next(); 
    String value = null; 
    try{ 
     if(xr.hasText()) { 
      value = xr.getElementText(); // was xr.getText(); 
     } 
    } 
    catch(IllegalStateException ex) 
    { 
     ex.printStackTrace(); 
    } 
    map.put(name, value);    
} 
+0

Получение ошибки синтаксического анализа, Message: Функция elementGetText() ожидает текстовый элемент, но START_ELEMENT wa встречается. – Vinod

+0

@Precious - см. Обновление, использующее метод 'hasText()'. –

+0

Теперь исключение очищается, но все значения идут с нулевым значением. – Vinod

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