2016-06-27 3 views
0

ich ein XML-String mit einem gewissen Tag wie folgt haben:ein XML-String Parsen erhalten keine weißen Flecken innerhalb Tag

den weißen Raum
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> 

Bitte beachten Sie vor dem „/>“. Aufgrund meiner Spezifikationen muss ich diesen Leerraum beibehalten, aber jedes Mal, wenn ich die Zeichenfolge analysiere, lösche der Parser diesen Leerraum.

mein Code Hier ist ("line" ist der XML-String):

byte[] base64DecodedResponse = Base64.decode(line); 
InputStream stream = new ByteArrayInputStream(base64DecodedResponse); 

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
documentBuilderFactory.setNamespaceAware(true); 
documentBuilderFactory.setIgnoringElementContentWhitespace(true); 
documentBuilderFactory.setValidating(true); 

DocumentBuilder docBuilder = documentBuilderFactory.newDocumentBuilder(); 

Document document = docBuilder.parse(stream); 

Ich versuchte Parser (Sax statt javax.xml.parser) zu ändern, aber das Problem bleibt. Irgendeine Lösung? Vielen Dank.

+0

Sie meinen, wenn Sie die XML-Ausgabe zurück in eine Datei schreiben, müssen Sie vor jeder einen Raum setzen />? Wenn dies der Fall ist, müssen Sie möglicherweise Ihren eigenen Serializer für XML schreiben. –

+0

Ich bekomme eine Base64-Datei, ich entziffere sie, und ich bekomme meine XML-String, mit allen Leerzeichen an den richtigen Stellen, wenn ich die Zeichenfolge analysieren, um ein Dokument zu bekommen, und ich drucke, merke ich, dass alle Leerzeichen davor die "/>" sind weg. Ich hoffe, ich habe meine Situation klarer gemacht. Danke für die Antwort. –

+0

Wie drucken Sie den Inhalt Ihres "Dokuments"? –

Antwort

0

Ich sehe zwei Möglichkeiten:

  1. Spaziergang durch die XML-Struktur (im document) und die Ergebnisse zu Linien Zeichenfolge schreiben.

  2. Verwenden Sie die Druckmethode, die Sie haben, und führen Sie dann einen replaceAll aus, der jedes Vorkommen von "/>" durch "/>" ersetzt, z.

    String result = result.replaceAll("\\/\\>", " />"); 
    
Verwandte Themen