如何在Java中parsing包含XML的string并检索根节点的值?

我有一个包含的stringforms的XML

<message>HELLO!</message> 

我怎样才能得到string“你好!” 从XML? 这应该是可笑的容易,但我迷路了。 XML不在文档中,它只是一个string。

使用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 } 

您也可以使用基础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()); 

你可以用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! 

上述答案状态之一将XMLstring转换为不需要的字节。 相反,您可以使用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()); 

正在做XML阅读权利,或做只是为了解决问题。 这样做会正确使用文档parsing。

或者…狡猾的将使用任何wisuzu的反应或使用正则expression式与matchers自定义文本parsing。

我想你会看看String类,有多种方法可以做到这一点。 什么是substring(int,int)indexOf(int) lastIndexOf(int)