1

我有一个 Java 应用程序,它从一个具有多行文本节点的网站获取 xml 文件,如下所示:

<root>
   <node>info</node>
   <mlnode>some
multi
line
text</mlnode>
</root>

我的代码目前如下所示:

    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(xml)));
    NodeList nList = doc.getElementsByTagName("mlnode");
    Node nNode = nList.item(0);

    System.out.println(nNode.getTextContent());

可悲的是,这段代码将我的多行内容放在一行中:somemultilinetext. 我想保留换行符。而且我希望在所有操作系统(主要是 windows 和 linux)上保留换行符。

我怎么做?

编辑:这个问题不是关于正确的缩进。这只是关于在节点的内容中保留换行符。将换行符保留在原处很重要,因为该节点的内容是配置文件的一部分,并且必须用换行符分隔。
我不关心正确的缩进(如果我这样做了:我知道在 SO 和其他论坛上有足够的资源来解释如何正确缩进)。

4

3 回答 3

0

换行符被解析并按原样输出。

您的源 XML 似乎没有 Windows 需要的两个行尾字符。我猜你必须找到换行符(“\n”)并用回车和换行符(“\r\n”)替换它们。

由于附加的 "\r" 在 Unix 系统上将显示为 ^M,因此您应该检测 JVM 中的操作系统,确保它是 Windows 并进行替换。

于 2013-03-12T08:46:49.873 回答
0

我发现了错误,它不在我在问题中发布的代码中。
问题出在获取网站内容的代码中,这是一个 xml 文件,并将其转换为字符串。我使用了以下代码,改编自这个问题:

URL url;
InputStream is = null;
DataInputStream dis;
String line;
String content

try {
    url = new URL("https://stackoverflow.com/");
    is = url.openStream();  // throws an IOException
    dis = new DataInputStream(new BufferedInputStream(is));

    while ((line = dis.readLine()) != null) {
        content += line; // I forgot to add the linebreak here!
        // I added "content += System.getProperty("line.separator");" and it solved my problem
    }
} catch (MalformedURLException mue) {
     mue.printStackTrace();
} catch (IOException ioe) {
     ioe.printStackTrace();
} finally {
    try {
        is.close();
    } catch (IOException ioe) {
        // nothing to see here
    }
}

抱歉,我没有想到其他班级的问题,所以我没有将该代码添加到我的问题中。

于 2013-03-15T02:17:37.577 回答
0

您可以按以下方式更改代码

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(xml)));
NodeList nList = doc.getElementsByTagName("mlnode");
Node nNode = nList.item(0);
String value = nNode.getTextContent();

StringBuilder stb = new StringBuilder();
String [] strAry = value.split("\n");
for(int k = 0; k < strAry.length; k++){
   stb.append(strAry[k]);
   stb.append(System.getProperty("line.separator"));
}
System.out.println(stb.toString());

这应该根据需要打印文本

于 2013-11-25T07:09:55.490 回答