IndentingXMLStreamWriter.java的替代方案

IndentingXMLStreamWriter.java的替代方案,java,xml,parsing,indentation,Java,Xml,Parsing,Indentation,它们是IndentingXMLStreamWriter.java的替代品吗?我总是在某个时候遇到一些问题,我无法编译,尽管过了一段时间它就消失了。因此,我想知道它们是否是缩进手动解析的XML文件的另一种方法 虽然错误消息在作为netbeans模块的一部分编译时略有不同。。。对于任何想知道=p的人,路径都会被~改变 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\MasterDeckXMLImporterExporter.java:5: package com.sun.

它们是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();
import com.sun.xml.internal.txw2.output.IndentingXMLStreamWriter;
XMLStreamWriter xsw=XMLOutputFactory.newInstance().createXMLStreamWriter(新文件输出流(新文件(“Blah”));
xsw=新的缩进XmlStreamWriter(xsw);
xsw.writeStartDocument();
xsw.WriteStarteElement(“映射”);
对于(Map.Entry:Map.entrySet()){
xsw.writeEmptyElement(“entry1”);
writeAttribute(“Name”,entry.getKey());
writeAttribute(“date”,sdf.format(entry.getValue());
}
xsw.writeEndElement();
xsw.writeEndDocument();
xsw.close();

如果将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);
或使用标准TransformerFactory:

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));

你可以用萨克森。在s9api接口中,您可以执行以下操作

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

然后是一个实现XMLStreamWriter接口的缩进序列化程序,如果您想使用它,可以使用更多的格式选项。

请注意,
XMLSerializer
类在Xerces2包中不再可用。如果您使用的是vanilla JDK 1.6、apache XML或Xerces2,则必须使用JAX-P标准(即
Transformer
)版本。您最终做了什么?我遇到了这个问题——特别是在尝试使用IndentingXMLStreamWriter使用maven进行编译时。我希望采用JDK类,但我不愿意为了使用Transformer类而重新分析输出。所以看起来我可能会像过去一样使用XPP3序列化程序。