2010-04-02 3 views
5

Je crée un document XML. Je l'ai mis en retrait en utilisant TransformerFactory.setAttribute("indent-number", new Integer(2)); Transformer.setOutputProperty(OutputKeys.INDENT, "yes");Obtenir Java pour utiliser les onglets au lieu des espaces pour indenter

Est-il possible d'obtenir Java pour utiliser des onglets au lieu d'espaces pour indenter? Et comment?

+0

Quelle différence cela ferait-il d'avoir des onglets au lieu des espaces? Votre éditeur préfère les onglets? –

+0

transformer.setOutputProperty ("{http://xml.apache.org/xslt}indent-amount", "4"); a fait l'affaire pour moi. Ce n'est probablement pas une garantie, et en fait cela semble être fortement dépendant de la version de Java que vous utilisez. Personnellement, les onglets et les espaces ne signifient rien quand il s'agit simplement d'un fichier de données. –

Répondre

2

Non, pas en général. La spécification XSLT ne permet pas de spécifier l'espace WHAT à utiliser lors de la mise en retrait.

Il peut s'agir d'un élément spécifique au processeur XSLT à configurer. Consultez la documentation pour celle que vous utilisez.

Si vous le voulez vraiment, alors vous pouvez utiliser un script XSLT afterburner sur la sortie qui fait ce que vous voulez faire sur les nœuds text().

0

Je ne pense pas.

Vous pouvez obtenir le résultat et le traiter, en remplaçant l'appel str.replace("\n ", "\n\t") (ou le nombre d'espaces que vous voulez).

Mais je recommanderais contre cela - les onglets ne sont pas indépendants de la plate-forme.

+2

@Bozho, il peut être dangereux de faire un appel 'str.replace' car il pourrait finir par remplacer certaines valeurs d'attribut, etc., par tabulation à partir de l'espace; très indésirable n'est-ce pas? –

+0

vous avez raison - j'ai ajouté une mise à jour en ajoutant une nouvelle ligne. – Bozho

1

Oui, les onglets sont considérés comme mal par quelques-uns. Toutefois, si vous souhaitez utiliser TransformFactory et que vous souhaitez modifier le comportement de retrait pour utiliser des onglets au lieu d'espaces, vous devez fournir votre propre implémentation de ContentHandler. Ensuite, passez votre implémentation de ContentHandler dans un nouveau SAXResult - passez cela en tant que "résultat" au Transformer.transform(...). Beaucoup de cerceaux pour sauter à travers. Une autre considération peut être d'utiliser un XSLT intelligent sur votre sortie.

Questions connexes