Альтернатива IndentingXMLStreamWriter.java - PullRequest
3 голосов
/ 23 августа 2011

Является ли они альтернативой IndentingXMLStreamWriter.java У меня всегда была какая-то проблема в какой-то момент, когда я не могу скомпилировать, хотя через некоторое время она исчезла. Поэтому мне было интересно, был ли это альтернативный способ сделать отступ вручную анализируемым XML-файлам

хотя сообщение об ошибке немного отличается, когда оно компилируется как часть модуля netbeans ... пути изменяются на ~ для всех, кому интересно = p

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\MasterDeckXMLImporterExporter.java:5: package com.sun.xml.internal.txw2.output does not exist
import com.sun.xml.internal.txw2.output.IndentingXMLStreamWriter;
Note: Attempting to workaround 6512707
warning: No processor claimed any of these annotations: [javax.xml.bind.annotation.XmlValue, javax.xml.bind.annotation.XmlSeeAlso, javax.xml.bind.annotation.XmlAccessorType, javax.xml.bind.annotation.XmlRootElement, javax.xml.bind.annotation.XmlAttribute]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\MasterDeckXMLImporterExporter.java:5: package com.sun.xml.internal.txw2.output does not exist
import com.sun.xml.internal.txw2.output.IndentingXMLStreamWriter;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\MasterDeckXMLImporterExporter.java:68: cannot find symbol
symbol  : class IndentingXMLStreamWriter
location: class com.spectre.util.MasterDeckXMLImporterExporter
            xsw = new IndentingXMLStreamWriter(xsw);
2 errors
3 warnings
C:\Program Files\jmonkeyplatform\harness\suite.xml:182: The following error occurred while executing this line:
C:\Program Files\jmonkeyplatform\harness\common.xml:206: Compile failed; see the compiler error output for details.

Просто чтобы быть немного ясным, я бы использовал stax

import com.sun.xml.internal.txw2.output.IndentingXMLStreamWriter;

XMLStreamWriter xsw = XMLOutputFactory.newInstance().createXMLStreamWriter(new FileOutputStream(new File("Blah")));
xsw = new IndentingXMLStreamWriter(xsw);
xsw.writeStartDocument();
xsw.writeStartElement("map");
for (Map.Entry<String, Date> entry : map.entrySet()) {
     xsw.writeEmptyElement("entry1");
     xsw.writeAttribute("Name", entry.getKey());
     xsw.writeAttribute("date", sdf.format(entry.getValue()));
 }
 xsw.writeEndElement();
 xsw.writeEndDocument();
 xsw.close();

Ответы [ 2 ]

1 голос
/ 23 августа 2011

Вы можете использовать саксонский. В интерфейсе s9api вы можете сделать что-то вроде

Processor p = new Processor();
Serializer s = p.newSerializer(System.out);
s.setOutputProperty(Property.INDENT, "yes");
XMLStreamWriter w = s.getXMLStreamWriter();

и затем у вас есть отступающий сериализатор, который реализует интерфейс XMLStreamWriter, с множеством других доступных вариантов форматирования, если вы хотите поиграть с ними.

1 голос
/ 23 августа 2011

Если вы проанализируете ваш XML для экземпляра org.w3c.Document (например, с помощью DocumentBuilderFactory), вы можете попробовать следующее:

Используя Apache Xerces:

Document doc = ...;
OutputFormat format = new OutputFormat(doc);
format.setIndenting(true);
format.setIndent(2);
XMLSerializer serializer = new XMLSerializer(out, format);
serializer.serialize(doc);

Или используястандартный завод Transformer:

Document doc = ...;
Transformer t = TransformerFactory.newInstance().newTransformer();
t.setOutputProperty(OutputKeys.INDENT, "yes");
t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
t.transform(new DOMSource(doc), new StreamResult(out));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...