2010-04-02 11 views
5

Sto creando un documento XML. Ho ottenuto il rientro utilizzando TransformerFactory.setAttribute("indent-number", new Integer(2)); Transformer.setOutputProperty(OutputKeys.INDENT, "yes");Ottieni Java per utilizzare le schede anziché gli spazi per il rientro

È possibile ottenere Java per utilizzare le schede anziché gli spazi per il rientro? E come?

+0

Che differenza farebbe avere le schede anziché gli spazi? Il tuo editore ama le schede meglio? –

+0

transformer.setOutputProperty ("{http://xml.apache.org/xslt}indent-amount", "4"); ha fatto il trucco per me. Probabilmente non è una garanzia, e in effetti sembra essere altamente dipendente dalla versione di java che stai usando. Personalmente, le schede e gli spazi non significano nulla quando si tratta di un file di dati. –

risposta

2

No, non in generale. Le specifiche XSLT non consentono di specificare WHAT spazi bianchi da usare quando rientrano.

Potrebbe tuttavia essere un elemento specifico del processore XSLT da configurare. Controlla la documentazione di quello che stai utilizzando.

Se si desidera VERAMENTE questo, quindi è possibile utilizzare uno script XSLT postbruciatore sull'output che fa tutto ciò che si vuole fare su text() - nodi.

0

Penso di no.

È possibile ottenere il risultato ed elaborarlo, sostituendo la chiamata str.replace("\n ", "\n\t") (o qualsiasi numero di spazi desiderati).

Ma mi raccomando contro questo: le schede non sono indipendenti dalla piattaforma.

+2

@Bozho, potrebbe essere pericoloso effettuare una chiamata 'str.replace' in quanto potrebbe finire per sostituire alcuni valori di attributo ecc. Alla tab dallo spazio; molto indesiderabile no? –

+0

hai ragione - Ho aggiunto un aggiornamento aggiungendo una nuova riga. – Bozho

1

Sì, le schede sono considerate malvagie da alcuni. Tuttavia, se si desidera utilizzare TransformFactory e si desidera modificare il comportamento di rientro per utilizzare le schede anziché gli spazi, è necessario fornire la propria implementazione di ContentHandler. Quindi passare l'implementazione di ContentHandler in un nuovo SAXResult - passarlo come "risultato" su Transformer.transform(...). Un sacco di cerchi da saltare. Un'altra considerazione potrebbe essere l'uso di un XSLT intelligente sull'output.

Problemi correlati