Как разобрать строку, содержащую XML в Java и получить значение корневого узла?

У меня есть XML в виде строки, которая содержит

<message>HELLO!</message> 

Как я могу получить строку "Привет!" из XML-файле? Это должно быть до смешного легко, но я потерял. XML уже'т в док, это просто строка.

Решение

Используя помощи jdom:

String xml = "HELLO!";
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 = "HELLO!";
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 = "HELLO!";
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)

Вы также можете использовать инструменты, имеющиеся в базовой версии:

String msg = "HELLO!";
DocumentBuilder newDocumentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document parse = newDocumentBuilder.parse(new ByteArrayInputStream(msg.getBytes()));
System.out.println(parse.getFirstChild().getTextContent());
Комментарии (3)

Вы можете сделать это с 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 = "HELLO! ";
        JAXBContext jc = JAXBContext.newInstance(String.class);
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        StreamSource xmlSource = new StreamSource(new StringReader(xmlString));
        JAXBElement je = unmarshaller.unmarshal(xmlSource, String.class);
        System.out.println(je.getValue());
    }

}

Выход

HELLO!
Комментарии (0)

Один из вышеуказанных государств ответ для преобразования XML-строку в байты, которые не нужны. Вместо этого можно использовать методы фабрики и поставляем его с StringReader.

String xmlStr = "HELLO!";
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse(new InputSource(new StringReader(xmlStr)));
System.out.println(doc.getFirstChild().getNodeValue());
Комментарии (0)

Там чтения XML, или изворотливые больше. Правильно будет с помощью соответствующего разбора документа.

Или... изворотливые будет использовать пользовательский текст разбора с wisuzu'ы ответ или с помощью регулярных выражений в Первомайскую.

Комментарии (1)

Я думаю, что вы будете смотреть на строка класс, существует несколько способов сделать это. Насчет подстрока(интервал,интервал) и помощи indexOf(инт) lastIndexOf(инт)?

Комментарии (1)