2010-04-02 4 views
5

Estoy creando un documento XML. Lo tengo para sangrar usando TransformerFactory.setAttribute("indent-number", new Integer(2)); Transformer.setOutputProperty(OutputKeys.INDENT, "yes");Obtener Java para usar pestañas en lugar de espacios para sangrar

¿Es posible hacer que Java use pestañas en lugar de espacios para sangrar? ¿Y cómo?

+0

¿Qué diferencia tendría tener pestañas en lugar de espacios? Su editor le gusta las pestañas mejor? –

+0

transformer.setOutputProperty ("{http://xml.apache.org/xslt}indent-amount", "4"); hizo el truco para mí Probablemente no sea una garantía, y de hecho parece depender en gran medida de la versión de Java que esté utilizando. Las pestañas personales frente a los espacios no significan nada cuando solo se pretende que sean un archivo de datos. –

Respuesta

2

No, no en general. La especificación XSLT no permite especificar QUÉ espacios en blanco usar al sangrar.

Sin embargo, podría ser un elemento específico del procesador XSLT para configurar. Verifique la documentación para el que está usando.

Si REALMENTE desea esto, puede usar un script de postcombustión XSLT en el resultado que hace lo que quiera hacer en texto() - nodos.

0

Creo que no.

Puede obtener el resultado y procesarlo, reemplazando la llamada str.replace("\n ", "\n\t") (o la cantidad de espacios que desee).

Pero yo recomendaría contra eso - las pestañas no son independientes de la plataforma.

+2

@Bozho, puede ser peligroso hacer una llamada '' str.replace' ya que podría terminar reemplazando algunos valores de atributos, etc., por tabular desde el espacio; muy indeseable ¿no? –

+0

tiene usted razón: agregué una actualización al agregar una nueva línea. – Bozho

1

Sí, las pestañas son consideradas malas por algunos. Sin embargo, si desea utilizar TransformFactory y desea cambiar el comportamiento de sangrado para usar pestañas en lugar de espacios, debe proporcionar su propia implementación de ContentHandler. Luego pase su implementación de ContentHandler a una nueva SAXResult - pase eso como el "resultado" al Transformer.transform(...). Muchos aros para saltar. Otra consideración puede ser usar un XSLT inteligente sobre su salida.

Cuestiones relacionadas