Java 解析XML时发生IllegalStateException?

Java 解析XML时发生IllegalStateException?,java,xml,xml-parsing,stax,Java,Xml,Xml Parsing,Stax,在解析XMl时,如果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.inter

在解析XMl时,如果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)
<Address>
    <Name>Rahul</Name>
    <ID>2345</ID>
    <City/>
    <Street>Gandhi Nagar</Street>
</Address>
如果XML格式具有这种结构,那么它就可以正常工作

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

我们如何处理异常?

我认为您的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>

拉胡尔
2345
浦那
甘地·纳加尔
223363
9988776655

更改代码以执行以下操作,以利用
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);               
} 

记住一个格式良好的XML应该有一个根标记是很有用的。事实上我得到了问题,它不是父标记的问题。我发现我的xml one字段带有空值,比如,因此它抛出异常。如何解决它获取解析错误,消息:elementGetText()函数需要纯文本元素,但遇到起始元素。@preciouse-请参阅使用
hasText()
方法的更新。现在异常被清除,但所有值都带有空值。它甚至没有输入到hasText()循环中。
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);               
}