J'ai le code suivant:
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFile);
Comment puis-je le faire pour analyser le XML contenu dans une chaîne au lieu d'un fichier?
J'ai cette fonction dans ma base de code, cela devrait fonctionner pour vous.
public static Document loadXMLFromString(String xml) throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(xml));
return builder.parse(is);
}
voir aussi cette question similaire
Une solution consiste à utiliser la version d'analyse qui prend un InputSource plutôt qu'un fichier
Un SAX InputSource peut être construit à partir d'un objet Reader. Un objet Reader est le StringReader
Donc quelque chose comme
parse(new InputSource(new StringReader(myString))) may work.
javadocs indique que la méthode d'analyse est surchargée.
Créez un StringStream ou InputSource en utilisant votre chaîne XML et vous devriez être défini.
Convertir la chaîne en InputStream et la transmettre à DocumentBuilder
final InputStream stream = new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8));
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
builder.parse(stream);
EDIT
En réponse au commentaire de bendin concernant l'encodage, voir la réponse de shsteimer à cette question.
J'utilise cette méthode
public Document parseXmlFromString(String xmlString){
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputStream inputStream = new ByteArrayInputStream(xmlString.getBytes());
org.w3c.dom.Document document = builder.parse(inputStream);
return document;
}
Vous pouvez utiliser le paquet Scilca XML Progession disponible sur GitHub.
XMLIterator xi = new VirtualXML.XMLIterator("<xml />");
XMLReader xr = new XMLReader(xi);
Document d = xr.parseDocument();