1

次のような複数行のテキスト ノードを持つ Web サイトから xml ファイルを取得する Java アプリケーションがあります。

<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());

悲しいことに、このコードは複数行のコンテンツを 1 行にまとめます: somemultilinetext. 改行を保存したいと思います。そして、すべてのオペレーティング システム (主に Windows と Linux) で改行を維持したいと考えています。

それ、どうやったら出来るの?

編集:この質問は正しいインデントに関するものではありません。ノードの内容に改行を保持するだけです。そのノードのコンテンツは構成ファイルの一部であり、改行で区切る必要があるため、改行を元の場所に保持することが重要です。
私は正しいインデントを気にしません(もしそうなら、正しくインデントする方法を説明する十分な情報源が SO や他のフォーラムにあることを知っています)。

4

3 に答える 3

0

改行は解析され、そのまま出力されます。

ソース XML には、Windows が必要とする 2 つの行末文字が含まれていないようです。改行 ("\n") を見つけて、改行と改行 ("\r\n") に置き換える必要があると思います。

追加の「\r」は Unix システムでは ^M として表示されるため、JVM で OS を検出し、それが Windows であることを確認して置換を行う必要があります。

于 2013-03-12T08:46:49.873 に答える
0

エラーが見つかりましたが、質問に投稿したコードにはありませんでした。
問題は、Web サイトのコンテンツ (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 に答える