8
votes

Obtenez Java pour utiliser des onglets au lieu d'espaces pour indenter

Je crée un document XML. Je l'ai eu à indenter en utilisant transformerfactory.setattribute ("numéro d'indent", nouvel entiers (2)); Transformer.setOutputProperty (SortieKeys.indent, "Oui");

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


2 commentaires

Quelle différence cela ferait-il d'avoir des onglets au lieu des espaces? Votre éditeur aime mieux les onglets?


transformer.setoutoutProperty ("{ xml.apache.org/xslt } indent-un montage", " 4 "); a fait le tour pour moi. Ce n'est probablement aucune garantie et il semble en fait être fortement dépendant de la version de Java que vous utilisez. Personnellement, onglets vs. Les espaces ne veulent rien dire quand il s'agit simplement d'être un fichier de données.


3 Réponses :


0
votes

Je pense pas.

Vous pouvez obtenir le résultat et le traiter, remplacer l'appelant str.replace ("\ n", "\ n \ t") (ou quel que soit le nombre d'espaces que vous voulez).

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


2 commentaires

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


Cela ne remplace que le premier niveau d'indentation.



1
votes

Oui, les onglets sont considérés comme mauvais par quelques-uns. Toutefois, si vous souhaitez utiliser TransformFactory et souhaitez modifier le comportement d'indentation pour utiliser des onglets à la place des espaces, vous devez fournir votre propre implémentation de contenthandler . Ensuite, passez votre implémentation de contenthandler dans un nouveau SaxResult - transmettant comme "résultat" au "code> transformateur.transform (...) . Beaucoup de cerceaux à sauter à travers. Une autre considération peut être d'utiliser un XSLT intelligent sur votre sortie.


0 commentaires

2
votes

Non, pas en général. La spécification XSLT ne permet pas de spécifier ce que les espaces utilisent à l'utilisation de l'empiècement lors de l'indentation.

Cela pourrait toutefois être un élément spécifique du processeur XSLT à configurer. Vérifiez la documentation pour celle que vous utilisez.

Si vous voulez vraiment cela, vous pouvez utiliser un script Afterburfer XSLT sur la sortie qui fait ce que vous voulez faire sur Text () - Nœuds.


0 commentaires