Я использую встроенный в Java преобразователь XML, чтобы взять документ DOM и распечатать полученный XML. Проблема в том, что он вообще не делает отступ для текста, несмотря на явную установку параметра «indent».
образец кода
public class TestXML {
public static void main(String args[]) throws Exception {
ByteArrayOutputStream s;
Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Transformer t = TransformerFactory.newInstance().newTransformer();
Element a,b;
a = d.createElement("a");
b = d.createElement("b");
a.appendChild(b);
d.appendChild(a);
t.setParameter(OutputKeys.INDENT, "yes");
s = new ByteArrayOutputStream();
t.transform(new DOMSource(d),new StreamResult(s));
System.out.println(new String(s.toByteArray()));
}
}
результат
<?xml version="1.0" encoding="UTF-8" standalone="no"?><a><b/></a>
желаемый результат
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<a>
<b/>
</a>
Мысли?
java
xml
transform
indentation
Майк
источник
источник
INDENT=yes
мне также пришлось добавить следующее:t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
org.apache.xml.serializer.OutputPropertiesFactory.S_KEY_INDENT_AMOUNT
Ни одно из предложенных решений не помогло мне. Поэтому я продолжал искать альтернативное решение, которое в итоге оказалось смесью двух упомянутых выше и третьего шага.
Вы должны выполнить (3), чтобы обойти "ошибочное" поведение кода обработки xml.
Источник: johnnymac75 @ http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6296446
(Если я неправильно процитировал свой источник, дайте мне знать)
источник
TransformerFactory
самом деле, чтобы другие знали.Writer
качестве вывода очень важен.Следующий код работает у меня с Java 7. Я установил отступ (да) и величину отступа (2) на трансформаторе (не на фабрике трансформаторов), чтобы заставить его работать.
Решение @mabac для установки атрибута у меня не сработало, но комментарий @ Lapo оказался полезным.
источник
import com.sun.org.apache.xml.internal.serializer.OutputPropertiesFactory
источник
Если вам нужен отступ, вы должны указать его в
TransformerFactory
.источник
Я использовал библиотеку Xerces (Apache) вместо того, чтобы возиться с Transformer. После добавления библиотеки добавьте приведенный ниже код.
источник
Для меня добавление
DOCTYPE_PUBLIC
сработало:источник