2009-02-18 4 views
199

Ich habe den folgenden Code:In Java, wie parse ich XML als Zeichenfolge anstelle einer Datei?

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

Wie kann ich es bekommen XML in einem String statt einer Datei zu analysieren?

+3

Beachten Sie auch, dass 'javax.xml.parsers.DocumentBuilder.parse (string)' die Zeichenkette ist ein uri (schrecklich ...) –

Antwort

406

Ich habe diese Funktion in meiner Code-Basis, das sollte für Sie arbeiten.

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 this similar question

+0

@shsteimer Ich übergebe xml string und es gibt null zurück. Es gibt keine Ausnahme. Was muss falsch sein? – sattu

+0

@sattu: Sie sollten es als neue Frage veröffentlichen. Es ist wirklich schwer zu sagen, ohne Ihren Code zu sehen. –

+0

vielen Dank, rettete mir einige Zeilen Code, ich habe es wieder in Text umgewandelt, aber ich wusste, dass es einen besseren Weg gab! – nkuebelbeck

5

javadocs zeigen, dass die Parse-Methode überlastet ist.

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

15

Eine Möglichkeit ist die Version von Parse zu verwenden, anstatt eine Datei mit einem Input nimmt

A SAX Input aus einem Reader-Objekt konstruiert werden kann. Ein Reader-Objekt ist der String

So etwas wie

parse(new InputSource(new StringReader(myString))) may work. 
+0

Sehr gut. Danke – IndieBoy

4

Konvertieren Sie die Zeichenfolge in ein Inputstream und übergibt es

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

EDIT
Als Reaktion auf bendin ‚s zu Document Kommentar zur Codierung, siehe shsteimer 's Antwort auf diese Frage.

+1

Ich würde den StringReader bevorzugen, weil er String.getBytes() vermeidet, aber das sollte * normalerweise * auch arbeiten. –

+3

Wenn Sie getBytes() aufrufen, welche Kodierung erwarten Sie? Wie erzählst du dem XML-Parser, welche Kodierung er bekommt? Erwarten Sie, dass es rät? Was passiert, wenn Sie sich auf einer Plattform befinden, auf der die Standardcodierung nicht UTF-8 ist? – bendin

1

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

können Sie die bei GitHub verfügbar Progression Paket Scilca XML verwenden.

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