org.apache.axiom.om.impl.llom.OMTextImpl无法强制转换为org.apache.axiom.om.OMElement

时间:2014-06-03 13:02:22

标签: java xml axiom

我试图做以下事情。

OMElement soapEnvelope = new StAXOMBuilder(soapEnvelopXMLFilePath).getDocumentElement();
OMElement firstElement = soapEnvelope.getFirstElement().getFirstElement();

然后我像这样迭代firstElement的子元素。

Iterator<OMElement> items = firstElement.getChildren();
while (items.hasNext()) {
    OMElement element = items.next();
    // ....do some processing here...
}

但是当我尝试执行下面的类转换异常时。

java.lang.ClassCastException: org.apache.axiom.om.impl.llom.OMTextImpl cannot be cast to org.apache.axiom.om.OMElement 

items.next()分配给元素OMElement对象时会发生错误。

知道为什么我会得到这个例外吗?我无法弄清楚是否有任何不匹配。

这些是我的示例xml文件的内容。

    <?xml version="1.0" encoding="utf-8"?>
    <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
        <soapenv:Body>
            <ns:MONITOR xmlns:ns="http://try.example.com">
                <ns:HOSTS>
                    <ns:HOST NAME="node1">
                        <ns:METRIC NAME="metric1" VALUE="1123"/>
                        <ns:METRIC NAME="metric3" VALUE="456"/>
                        <ns:METRIC NAME="metric2" VALUE="789"/>
                    </ns:HOST>
                    <ns:HOST NAME="node2">
                        <ns:METRIC NAME="metric1" VALUE="147"/>
                        <ns:METRIC NAME="metric3" VALUE="258"/>
                        <ns:METRIC NAME="metric2" VALUE="369"/>
                    </ns:HOST>
                </ns:HOSTS>
                <ns:HOSTS>
                    <ns:HOST NAME="node3">
                        <ns:METRIC NAME="metric1" VALUE="236"/>
                        <ns:METRIC NAME="metric3" VALUE="159"/>
                        <ns:METRIC NAME="metric2" VALUE="478"/>
                    </ns:HOST>
                </ns:HOSTS>
            </ns:MONITOR>
        </soapenv:Body>

感谢。

2 个答案:

答案 0 :(得分:4)

使用getChildElements代替getChildren

答案 1 :(得分:2)

并非每个节点都是元素。您应该将子项转换为OMNode并检查它们是否为元素,空格数计为文本节点