it-swarm.com.de

Wie analysiere ich in Java XML als Zeichenfolge anstelle einer Datei?

Ich habe folgenden Code:

DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFile);

Wie kann ich erreichen, dass XML, das in einem String enthalten ist, anstelle einer Datei analysiert wird?

240
Dewayne

Ich habe diese Funktion in meiner Codebasis, dies sollte für Sie funktionieren.

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);
}

siehe auch diese ähnliche Frage

466
shsteimer

Eine Möglichkeit besteht darin, die Version von parse zu verwenden, die eine InputSource anstelle einer Datei verwendet

Eine SAX InputSource kann aus einem Reader-Objekt erstellt werden. Ein Reader-Objekt ist der StringReader

Also sowas wie

parse(new InputSource(new StringReader(myString))) may work. 
16
Uri

javadocs zeigt an, dass die Analysemethode überladen ist.

Erstellen Sie einen StringStream oder eine InputSource mit Ihrer XML-Zeichenfolge, und Sie sollten festgelegt werden.

5
duffymo

Konvertieren Sie den String in einen InputStream und übergeben Sie ihn an DocumentBuilder

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

EDIT
Als Antwort auf den Kommentar von bendin zur Codierung siehe shsteimers Antwort auf diese Frage.

4
Akbar ibrahim

Ich benutze diese Methode

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;
}

Sie können das Scilca XML Progession-Paket verwenden, das bei GitHub erhältlich ist.

XMLIterator xi = new VirtualXML.XMLIterator("<xml />");
XMLReader xr = new XMLReader(xi);
Document d = xr.parseDocument();
0
Sukant Kumar