Dan*_*ski 7 xml xml-serialization xerces xalan
我正在使用Apache Xerces 2.11.0和Apache Xalan 2.7.1,我在序列化的XML中遇到了额外的回车字符问题.
我有这个(伪)代码:
String myString = ...;
Document doc = ...;
Element item = doc.createElement("item");
item.appendChild(doc.createCDATASection(myString));
Transformer transformer = ...;
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Result result = new StreamResult(stream);
transformer.transform(new DOMSource(document), result);
Run Code Online (Sandbox Code Playgroud)
现在myString包含换行符(\r\n),(实际上它是base64编码数据)但是当我查看序列化输出时,还有其他\r字符.
输入:
Line 1 \r\n
Line 2 \r\n
Line 3 \r\n
Run Code Online (Sandbox Code Playgroud)
输出:
Line 1 \r\r\n
Line 2 \r\r\n
Line 3 \r\r\n
Run Code Online (Sandbox Code Playgroud)
如果我使用createTextNode而不是createCDATASection输出变得更有趣:
Line 1 \r\n
Line 2 \r\n
Line 3 \r\n
Run Code Online (Sandbox Code Playgroud)
似乎在序列化期间引入了附加字符,DOM树似乎是正确的.(根据getTextContent())
为什么会这样?我该怎么做才能解决这个问题?
Ale*_*tis 11
我想你在Windows上遇到这个问题,而不是在Linux/Solaris/Mac上.Xalan序列化程序(org.apache.xml.serializer.ToStream.java)使用System.getProperty("line.separator")获取行分隔符.当串行器写入\ r \n时,它将\n解释为行序列的结尾,它实际上写入\ r + lineSeparator =\r \n \n \n \n.虽然这听起来很奇怪,但这不是一个错误,见[1].但由于这经常被报告为bug,因此添加了xalan扩展属性[2].所以你可以编程设置:
transformer.setOutputProperty("{http://xml.apache.org/xalan}line-separator","\n");
Run Code Online (Sandbox Code Playgroud)
要么
<xsl:output xalan:line-separator=" " />
Run Code Online (Sandbox Code Playgroud)
其中xalan是与URL" http://xml.apache.org/xalan " 关联的前缀.
[1] https://issues.apache.org/jira/browse/XALANJ-1660
[2] https://issues.apache.org/jira/browse/XALANJ-2093
| 归档时间: |
|
| 查看次数: |
3019 次 |
| 最近记录: |