2013-05-20 3 views
6

Ich brauche etwas Hilfe. In meiner String filedata-Variable habe ich ein XML-Dokument gespeichert. Jetzt möchte ich diese Variable auf einen DOMSource Typ umwandeln und diesen Code verwenden:Wie kann ich einen String in eine DOMSource in Java konvertieren?

DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
Document doc = db.parse(new InputSource(new StringReader(filedata))); 
DOMSource source = new DOMSource(doc); 

und Transformation von javax.xml.transform.Transformer:

Transformer transformer = XMLTransformerFactory.getTransformer(messageType); 
StreamResult res = new StreamResult(flatXML); 
transformer.transform(source, res); 

Aber mein flatXML ist leer nach der Transformation. Ich habe meine doc-Variable überprüft und sie enthält mein XML-Dokument und hat alles richtig analysiert. Wenn ich meine Quelle des realen Pfad ändern, alles ist in Ordnung und funktioniert gut:

Source source = new StreamSource("c:\\temp\\log\\SMKFFcompleteProductionPlan.xml"); 

Ich glaube, mein Problem in dieser Codezeile befindet:

DOMSource source = new DOMSource(doc); 

aber ich weiß nicht, wie zu lösen dieses Problem.

Antwort

13

Warum versuchen Sie einen DOMSource zu konstruieren? Wenn alles, was Sie wollen eine Quelle ist als Eingabe für eine Transformation zu liefern, ist es viel effizienter, eine Stream zu liefern, die Sie tun können, als

new StreamSource(new StringReader(fileData)) 

vorzugsweise eine systemId als auch zu liefern. Das Erstellen des DOM ist Zeitverschwendung.

+0

oh, vielen Dank) jetzt ist es Arbeit)) aber bitte, können Sie erklären, warum es nicht mit DOMSource funktioniert?) – turlife

+0

Nein, tut mir leid, kann ich nicht sofort sehen, was los ist. Aber Sie sagen nicht, welche DOM- und XSLT-Implementierungen Sie verwenden. es könnte etwas umsetzungsspezifisch sein. –

+0

Hallo. Kannst du auf meine andere Frage antworten? http://stackoverflow.com/questions/16669639/edit-two-xml-files – turlife

1

FYI: Es gibt keinen Konstruktor der Klasse DOMSource, der nur ein Argument String wie DOMSource (String) hat.
Die Konstrukteure sind wie folgt:
i) DOMSource()
ii) DOMSource(Node n)
iii) DOMSource(Node node, String systemID)
Bitte sehen: http://docs.oracle.com/javase/6/docs/api/javax/xml/transform/dom/DOMSource.html

+0

Tut mir leid, aber ich übergab Document type variable an DOMSource: 'DOMsource source = new DOMSource (doc);' nicht nur ein String – turlife

+0

Aber wie ist das möglich? –

+0

Ich muss meine Dokumentvariable in Knotentyp konvertieren? – turlife

Verwandte Themen