我正在做一些使用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。那裏也沒有答案。 –