我正在做一些使用XMLEventReader
和XMLEventWriter
的手术XML转换。在大多数情况下,我只写事件因为他们正在阅读:在XMLEventWriter中编码属性换行
import javax.xml.stream.*;
import javax.xml.stream.events.XMLEvent;
import java.io.StringReader;
import java.io.StringWriter;
public class StaxExample {
public static void main(String[] args) throws XMLStreamException {
String inputXml =
"<foo>" +
" <bar baz=\"a b c \"/>" +
" <changeme/>" +
"</foo>";
StringWriter result = new StringWriter();
XMLEventReader reader = XMLInputFactory.newFactory().createXMLEventReader(new StringReader(inputXml));
XMLEventWriter writer = XMLOutputFactory.newFactory().createXMLEventWriter(result);
while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
//in real code, look for "changeme" and insert some stuff
writer.add(event);
}
System.out.println(result.toString());
}
}
我的问题是,这将产生:
<?xml version="1.0" ?><foo> <bar baz="a
b
c
"></bar> <changeme></changeme></foo>
虽然语法有效的XML,这是必要的(由于下游消费)我保留换行符。上面的XML将被该消费者标准化为a b c
(事实上,StAX本身 - 如果我接收该输出并将其反馈回相同的程序中,则第二次将输出baz="a b c "
)。
尽管我已经放弃保留非语义格式的XMLEventWriter
,有没有办法阻止它实质上改变我的属性值?
XMLStreamReader/Writer的相似问题:http://stackoverflow.com/questions/8331364/how-to-preserve-whitespace-in-attributes-when-using-xmlstreamwriter。那里也没有答案。 –