首页 > 解决方案 > JDOM:如何避免漂亮的打印输出?

问题描述

如何避免
在我的 XML 输出中出现?

JDOM 在方法Format.setLineSeparator的 javadoc 中谈到了这一点。

为了这个问题,请假设我只得到一个必须序列化的 XML 文档。XML 元素文本可能包含来自数据库、UI 组件、浏览器、程序等\r\n和的任意组合。\r\n

是否可以将 JDOM 配置为只写入\r\n,而从不

这是 JDOM 的特性还是其他 XML 库的行为相同?将不得不检查...

到目前为止,我唯一的想法是迭代整个文档并删除\r任何元素的任何文本属性中的任何出现。如果这确实是我唯一的选择,我也会对正确且可读的方式感兴趣。

我的另一个想法是清理输出:xml.replace("
", "")

例子

  public static void main(String[] args) throws Exception
  {
    JTextPane pane = new JTextPane();
    pane.setText("line 1\r\nline 2");
    //    pane.setText("line 1\nline 2");
    Element element = new Element("el");
    element.setText(pane.getText());

    Format format = Format.getPrettyFormat();
    format.setLineSeparator("\r\n");
    StringWriter writer = new StringWriter();
    new XMLOutputter(format).output(new Document(element), writer);
    System.out.println(writer.toString());
  }

输出

    <?xml version="1.0" encoding="UTF-8"?>
    <el>line 1&#xD;
    line 2</el>

语境

我遇到了这个问题,因为 JTextPane.getText() 有时只返回文本,有时返回\n文本\r\n。JTextPane 也有一些非常疯狂的行尾逻辑。请参阅DefaultEditorKit(搜索EndOfLineStringProperty)。

标签: javaxmlswingjtextpanejdom

解决方案


引用的文档非常强调这里的答案是“否”。

每当它在输入字符串中看到“\r”时,它将用“ ”替换它。使用 setLineSeparator 只会更改 "\n" 转换为的内容。

如果你打电话会发生什么:format.setLineSeparator(LineSeparator.NONE);


推荐阅读