J'ai XML sous la forme d'une chaîne qui contient
<message>HELLO!</message>
Comment puis-je obtenir la chaîne "Bonjour!" du XML? Cela devrait être ridiculement facile mais je suis perdu. Le XML n'est pas dans un doc, c'est simplement une chaîne.
Utiliser 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
}
Utiliser le XercesDOMParser
:
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
}
Utilisation des interfaces 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
}
Vous pouvez également utiliser les outils fournis par la base 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());
Vous pouvez le faire avec JAXB (une implémentation est incluse dans 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());
}
}
sortie
HELLO!
L'un des états de réponse ci-dessus convertit XML String en octets, ce qui n'est pas nécessaire. Au lieu de cela, vous pouvez utiliser InputSource
et le fournir avec 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());
Il faut bien lire le code XML ou faire le malin pour s'en sortir. Le faire correctement consisterait à utiliser une analyse de document appropriée.
Ou ... douteux utiliserait une analyse de texte personnalisée avec la réponse de wisuzu ou des expressions régulières avec des correspondants.
Je pense que vous voudriez regarder String classe, il y a plusieurs façons de le faire. Qu'en est-il de substring(int,int)
et indexOf(int)
lastIndexOf(int)
?