从字符串中的XML提取值

时间:2019-03-26 11:28:55

标签: java

我写了一些代码,但是它们不起作用。 我还需要验证header:message是否存在

String xml = "<header:HostError>
<header:message>
    <header:messageCode>321</header:messageCode>
    <header:message>test</header:message>
</header:message>
<header:message>
    <header:messageCode>123</header:messageCode>
    <header:message>test</header:message>
</header:message>
</header:HostError>"

如何获取第一个messageCode和message?

    private void extractErrorsFromResponse(SOAPFaultDetail faultResponse) {

    for (Iterator itr = faultResponse.getAllDetailEntries(); itr.hasNext(); ) {
        Object element = itr.next();
        if (element instanceof OMElement) {             
            Object code = ((OMElement) element).getFirstChildWithName(new QName("message")).getFirstChildWithName(new QName("messageCode"));
            Object message = ((OMElement) element).getFirstChildWithName(new QName("message")).getFirstChildWithName(new QName("message"));
            faultResponse.addDetailEntry(((OMElement) element).cloneOMElement());
        }
    }
}

1 个答案:

答案 0 :(得分:0)

一个快速的解决方案就是。

String xml = "<header:HostError>" +
     "<header:message>\n" +
     "<header:messageCode>321</header:messageCode>\n" +
     "<header:message>test</header:message>\n" +
     "</header:message>\n" +
     "<header:message>\n" +
     "<header:messageCode>123</header:messageCode>\n" +
     "<header:message>test</header:message>\n" +
     "</header:message>\n" +
     "</header:HostError>";

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(new InputSource(new StringReader(xml)));

NodeList list = doc.getElementsByTagName("header:messageCode");

System.out.println("First messageCode : " + list.item(0).getFirstChild().getNodeValue());

NodeList list_ = doc.getElementsByTagName("header:message");
System.out.println("First message : " + list_.item(1).getFirstChild().getNodeValue());

它打印,

First messageCode : 321
First message : test

基于此,您需要找到一个更通用的方法。