XML-файл Java DOM создать - не иметь вкладок или пробелов в выходном файле - PullRequest
3 голосов
/ 28 февраля 2011

Я уже просмотрел сообщения на stackoverflow, но кажется, что ничего не помогает.

Вот что есть:

            // write the content into xml file
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        transformerFactory.setAttribute("indent-number", 2);
        Transformer transformer = transformerFactory.newTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");

        DOMSource source = new DOMSource(xmlDoc);
        StreamResult result =  new StreamResult(new File("C:\\testing.xml"));
        transformer.transform(source, result);

и вот что я получаю в качестве вывода:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Satellite SatelliteName="" XmlFileVersion="">
<test0>
<test1>
<test2>
<test3>
<test4>
<test5>
<test6>
<test7>
<test8>
<test9/>
</test8>
</test7>
</test6>
</test5>
</test4>
</test3>
</test2>
</test1>
</test0>
</Satellite>

Нет табуляции или пробелов.

Я установил номер отступа из-за возможной ошибки java и активировал OutputKeys.INDENT.

Есть еще идеи?

Редактировать 1 (после исправления адаршра):

Теперь у меня есть пробелы.Только первая запись спутника помещается в первую строку, которая не должна быть.

<?xml version="1.0" encoding="UTF-8"?><Satellite SatelliteName="" XmlFileVersion="">
  <test0>
    <test1>
      <test2>
        <test3>
          <test4>
            <test5>
              <test6>
                <test7>
                  <test8>
                    <test9>blah</test9>
                  </test8>
                </test7>
              </test6>
            </test5>
          </test4>
        </test3>
      </test2>
    </test1>
  </test0>
  <sdjklhewlkr/>
</Satellite>

Редактировать 2:

Таким образом, текущее состояние таково, что у меня теперь есть пробелы, но у меня нет строкикормить после объявления XML.Как я могу это исправить?

Ответы [ 4 ]

4 голосов
/ 28 февраля 2011

попробуйте установить величину отступа следующим образом:

transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
2 голосов
/ 15 мая 2013

Я играл с Transformer, но так и не заработал.Я использовал библиотеку Xerces (Apache), которая всегда меня устраивала.Попробуйте что-то вроде

OutputFormat format = new OutputFormat(document);
format.setLineWidth(65);
format.setIndenting(true);
format.setIndent(2);
Writer outxml = new FileWriter(new File("out.xml"));
XMLSerializer serializer = new XMLSerializer(outxml, format);
serializer.serialize(document);
1 голос
/ 28 февраля 2011

Я столкнулся с той же проблемой некоторое время назад.Проблема заключалась в том, что реализация загруженных классов TransformerFactory или Transformer отличалась от того, что Java намеревается сделать.

Было также свойство System, которое мы должны были установить для его решения.Я постараюсь получить это для вас через мгновение.

РЕДАКТИРОВАТЬ : Попробуйте это

System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.xsltc.trax.TransformerFactoryImpl");

0 голосов
/ 21 октября 2012

Я могу дать вам 2 совета

первый Вы можете использовать xsl файл для красивого вывода

второй Я нашел интересную библиотеку ode-utils-XXX.jar

И вы можете просто написать, как

String result = "";
        try {
            result = DOMUtils.prettyPrint(doc);
        } catch (IOException e) {           
            e.printStackTrace();
        }
        System.out.println(result);
...