2010-04-02 3 views
5

Я создаю XML-документ. Я получил его в отступ, используя TransformerFactory.setAttribute("indent-number", new Integer(2)); Transformer.setOutputProperty(OutputKeys.INDENT, "yes");Получить Java для использования вкладок вместо пробелов для отступов

Возможно ли, чтобы Java использовала вкладки вместо пробелов для отступов? И как?

+0

Какая разница, если у вас есть вкладки вместо пробелов? Ваш редактор любит вкладки лучше? –

+0

transformer.setOutputProperty ("{http://xml.apache.org/xslt}indent-amount", "4"); сделал трюк для меня. Вероятно, это не гарантия, и на самом деле это сильно зависит от версии java, которую вы используете. Личные вкладки или пробелы ничего не означают, когда это просто файл данных. –

ответ

2

Нет, не в целом. Спецификация XSLT не позволяет указывать WHIT-пробелы для использования при отступе.

Это может быть специфический элемент XSLT-процессора для настройки. Проверьте документацию на ту, которую вы используете.

Если вы действительно хотите этого, вы можете использовать XSLT-скрипт дожигателя на выходе, который делает все, что вы хотите сделать на text() - узлах.

0

думаю нет.

Вы можете получить результат и обработать его, заменив вызов str.replace("\n ", "\n\t") (или любое другое количество мест).

Но я бы рекомендовал против этого - вкладки не являются независимыми от платформы.

+2

@Bozho, может быть опасно совершать вызов 'str.replace', поскольку это может привести к замене некоторых значений атрибутов и т. Д. На вкладку из пространства; очень нежелательно, не так ли? –

+0

Вы правы - я добавил обновление, добавив новую строку. – Bozho

+0

Это заменяет только первый уровень отступов. – EndlosSchleife

1

Да, вкладки считаются злыми несколькими. Однако, если вы хотите использовать TransformFactory и хотите изменить поведение отступов для использования вкладок вместо пробелов, вам необходимо предоставить свою собственную реализацию ContentHandler. Затем передайте свою реализацию ContentHandler в новый SAXResult - проход, который как «результат» для Transformer.transform(...). Множество обручей, чтобы проскочить. Еще одним соображением может быть использование смарт-XSLT над вашим выходом.