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 l'obtenir pour analyser XML contenu dans une chaîne au lieu d'un fichier?

Author: bluish, 2009-02-18

6 answers

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 semblable

 429
Author: shsteimer, 2017-05-23 12:18:16

Une façon est d'utiliser la version de parse 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
Author: Uri, 2014-06-18 09:26:26

Javadocs montre que la méthode parse est surchargée.

Créez un StringStream ou InputSource en utilisant votre chaîne XML et vous devriez être défini.

 5
Author: duffymo, 2009-02-18 17:58:18

Convertissez la chaîne en InputStream et passez-la à DocumentBuilder

final InputStream stream = new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8));
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
builder.parse(stream);

MODIFIER
En réponse au commentaire de bendin concernant l'encodage, voir la réponse de shsteimer à cette question.

 4
Author: Akbar ibrahim, 2016-05-09 13:36:50

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;
}
 2
Author: Yasir Shabbir Choudhary, 2016-09-07 09:48:58

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
Author: Sukant Kumar, 2016-10-10 07:25:35