web-dev-qa-db-fra.com

En Java, comment analyser XML en tant que chaîne au lieu d'un fichier?

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?

240
Dewayne

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

466
shsteimer

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. 
16
Uri

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.

5
duffymo

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.

4
Akbar ibrahim

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();
0
Sukant Kumar