Tengo el siguiente código:
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFile);
¿Cómo puedo obtener analizar XML contenido dentro de una cadena en lugar de un archivo?
Tengo esta función en mi código base, esto debería funcionar para usted.
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); }
también veo esta pregunta similar
Una forma es usar la versión de parse que toma un InputSource en lugar de un archivo
Un SAX InputSource se puede construir a partir de un objeto Reader. Un objeto de Reader es el StringReader
Así que algo así como
parse(new InputSource(new StringReader(myString))) may work.
Los javadocs muestran que el método de análisis está sobrecargado.
Cree un StringStream o InputSource usando su cadena XML y usted debería estar configurado.
Convierta la cadena a un InputStream y páselo a DocumentBuilder
final InputStream stream = new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8)); DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); builder.parse(stream);
EDITAR
En respuesta al comentario de bendin con respecto a la encoding, ver la respuesta de shsteimer a esta pregunta.
Estoy usando este método
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; }
Puede usar el paquete Scilca XML Progession disponible en GitHub.
XMLIterator xi = new VirtualXML.XMLIterator(" "); XMLReader xr = new XMLReader(xi); Document d = xr.parseDocument();