2016-09-13 3 views
0

Ich muss CSV in XML und dann in OutputStream konvertieren. Regel ist " in " in meinem Code zu konvertieren.Korrigieren von XML-Code in Java

Eingang CSV Zeile:

{"Test":"Value"} 

Erwartete Ausgabe:

<root> 
<child>{&quot;Test&quot;:&quot;Value&quot;}</child> 
<root> 

Stromausgang:

<root> 
<child>{&amp;quot;Test&amp;quot;:&amp;quot;Value&amp;quot;}</child> 
<root> 

Code:

File file = new File(FilePath); 
BufferedReader reader = null; 

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder domBuilder = domFactory.newDocumentBuilder(); 

Document newDoc = domBuilder.newDocument(); 
Element rootElement = newDoc.createElement("root"); 
newDoc.appendChild(rootElement); 

reader = new BufferedReader(new FileReader(file)); 
String text = null; 

    while ((text = reader.readLine()) != null) { 
      Element rowElement = newDoc.createElement("child"); 
      rootElement.appendChild(rowElement); 
      text = StringEscapeUtils.escapeXml(text); 
      rowElement.setTextContent(text); 
      } 

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
Source xmlSource = new DOMSource(newDoc); 
Result outputTarget = new StreamResult(outputStream); 
TransformerFactory.newInstance().newTransformer().transform(xmlSource, outputTarget); 
System.out.println(new String(baos.toByteArray())) 

Könnten Sie bitte helfen? Was vermisse ich und wenn & zu &amp; konvertieren?

+0

Sie sind doppelt entkommen. DOM wird für dich entkommen, aber du entkommst auch. Entfernen Sie den Aufruf von 'StringEscapeUtils.escapeXml (Text)'. – Andreas

+0

Ich habe darüber gelesen. Seltsam ist, dass nach dem Entfernen entkommen, gibt es keine Flucht passieren. – user3305630

+0

Da Sie nur "" in Attributen mit Werten, die von '" 'zitiert werden, z. das ist gültiges XML: ' er hatte gesagt:" Hallo "'. Die Zeichen '<' und '&' müssen immer in Anführungszeichen gesetzt werden (außer in CDATA), während '>' nur nach ']]' zitiert werden muss (wie im CDATA-Terminator ']]>'), aber '>' ist normalerweise immer auch zitiert. – Andreas

Antwort

1

Die XML-Bibliothek wird automatisch Strings entschlüsseln, die mit XML-Escapezeichen versehen werden müssen. Daher müssen Sie nicht manuell mit StringEscapeUtils.escapeXml entkommen. Entfernen Sie einfach diese Zeile und Sie sollten genau das, was Sie suchen, richtig-maskiertes XML erhalten.

XML erfordert keine " Zeichen, die überall, nur innerhalb von Attributwerten, zu maskieren sind. Das ist also gültige XML bereits:

<root> 
<child>{"Test":"Value"}</child> 
<root> 

Sie würden die Anführungszeichen entkommen, wenn Sie ein Attribut haben, die ein Angebot enthalten ist, wie zum Beispiel: <child attr="properly &quot;ed"/>

Dies ist einer der Hauptgründe, eine XML-Bibliothek zu verwenden: Die Feinheiten des Zitatens werden bereits für Sie behandelt. Keine Notwendigkeit, die XML spec zu lesen, um sicherzustellen, dass Sie die Anführungsregeln richtig haben.

+0

Ich habe darüber gelesen. Seltsam ist, dass nach dem Entfernen entkommen, gibt es keine Flucht passieren. – user3305630

+0

@ user3305630: Die Antwort basierend auf Ihrem Kommentar aktualisiert –

+0

Danke, Das ist wirklich richtig. – user3305630

Verwandte Themen