如何在Java中解析包含XML的String并检索根节点的值?

时间:2011-12-06 23:41:16

标签: java xml root

我有一个包含

的String形式的XML
<message>HELLO!</message> 

如何获取字符串“Hello!”来自XML?这应该是非常容易的,但我迷失了。 XML不在doc中,它只是一个String。

6 个答案:

答案 0 :(得分:76)

使用 JDOM

String xml = "<message>HELLO!</message>";
org.jdom.input.SAXBuilder saxBuilder = new SAXBuilder();
try {
    org.jdom.Document doc = saxBuilder.build(new StringReader(xml));
    String message = doc.getRootElement().getText();
    System.out.println(message);
} catch (JDOMException e) {
    // handle JDOMException
} catch (IOException e) {
    // handle IOException
}

使用 Xerces DOMParser

String xml = "<message>HELLO!</message>";
DOMParser parser = new DOMParser();
try {
    parser.parse(new InputSource(new java.io.StringReader(xml)));
    Document doc = parser.getDocument();
    String message = doc.getDocumentElement().getTextContent();
    System.out.println(message);
} catch (SAXException e) {
    // handle SAXException 
} catch (IOException e) {
    // handle IOException 
}

使用 JAXP 接口:

String xml = "<message>HELLO!</message>";
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
try {
    db = dbf.newDocumentBuilder();
    InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(xml));
    try {
        Document doc = db.parse(is);
        String message = doc.getDocumentElement().getTextContent();
        System.out.println(message);
    } catch (SAXException e) {
        // handle SAXException
    } catch (IOException e) {
        // handle IOException
    }
} catch (ParserConfigurationException e1) {
    // handle ParserConfigurationException
}

答案 1 :(得分:8)

您还可以使用基础JRE提供的工具:

String msg = "<message>HELLO!</message>";
DocumentBuilder newDocumentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document parse = newDocumentBuilder.parse(new ByteArrayInputStream(msg.getBytes()));
System.out.println(parse.getFirstChild().getTextContent());

答案 2 :(得分:7)

您可以使用JAXB执行此操作(Java SE 6中包含一个实现)。

import java.io.StringReader;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;

public class Demo {

    public static void main(String[] args) throws Exception {
        String xmlString = "<message>HELLO!</message> ";
        JAXBContext jc = JAXBContext.newInstance(String.class);
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        StreamSource xmlSource = new StreamSource(new StringReader(xmlString));
        JAXBElement<String> je = unmarshaller.unmarshal(xmlSource, String.class);
        System.out.println(je.getValue());
    }

}

<强>输出

HELLO!

答案 3 :(得分:4)

上述答案之一指出将XML String转换为不需要的字节。相反,您可以使用InputSource并将其提供给StringReader

String xmlStr = "<message>HELLO!</message>";
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse(new InputSource(new StringReader(xmlStr)));
System.out.println(doc.getFirstChild().getNodeValue());

答案 4 :(得分:1)

正在进行正确的XML阅读,或者只是为了躲避而做的狡猾。 做得对,就是使用正确的文档解析。

或者......狡猾的人会使用自己的文本解析与wisuzu的响应或使用正则表达式与匹配器。

答案 5 :(得分:0)

我认为你会看String课,有多种方法可以做到。那么substring(int,int)indexOf(int) lastIndexOf(int)呢?