J'ai le code suivant :
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFile);
Comment puis-je faire en sorte qu'il analyse le XML contenu dans une chaîne de caractères plutôt que dans un fichier ?
J'ai le code suivant :
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFile);
Comment puis-je faire en sorte qu'il analyse le XML contenu dans une chaîne de caractères plutôt que dans un fichier ?
J'ai cette fonction dans ma base de code, elle 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
@shsteimer Je passe une chaîne xml et elle renvoie null. Il n'y a pas d'exception. Qu'est-ce qui ne va pas ?
@sattu : Vous devriez poser une nouvelle question. C'est vraiment difficile à dire sans voir votre code.
Merci beaucoup, cela m'a permis d'économiser plusieurs lignes de code, j'étais en train de le reconvertir en texte mais je savais qu'il y avait une meilleure façon de faire !
Une solution consiste à utiliser la version de parse qui prend une source d'entrée (InputSource) plutôt qu'un fichier
Une source d'entrée SAX peut être construite à partir d'un objet Reader. Un objet lecteur est le StringReader
Ainsi, quelque chose comme
parse(new InputSource(new StringReader(myString))) may work.
Convertir la chaîne en un InputStream et la passer au DocumentBuilder
final InputStream stream = new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8));
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
builder.parse(stream);
EDITAR
En réponse à bendin Voir le commentaire de M. B. concernant l'encodage. shsteimer La réponse de la Commission européenne à cette question.
Je préférerais le StringReader parce qu'il évite String.getBytes(), mais cela devrait généralement travailler aussi.
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;
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
7 votes
Il convient également de noter que
javax.xml.parsers.DocumentBuilder.parse(string)
suppose que la chaîne est un uri (terrible...)