2016-09-26 12 views
0

xml文字列を分割する方法があるかどうかは疑問でした。文字列からのxmlメッセージの分割

私はここに文字列を持っている:

<?xml version="1.0" encoding="UTF-8"?> <Messages> <Status>Iam good</Status> </Messages> 
    <?xml version="1.0" encoding="UTF-8"?> <Messages> <Status>Iam good</Status> </Messages> 
    <?xml version="1.0" encoding="UTF-8"?> <Messages> <Status>Iam NOT good</Status> </Messages> 
    <?xml version="1.0" encoding="UTF-8"?> <Messages> <Status>Iam good</Status> </Messages> 
    <?xml version="1.0" encoding="UTF-8"?> <Messages> <Status>Iam good</Status> </Messages> 
    <?xml version="1.0" encoding="UTF-8"?> <Messages> <Status>Iam NOT good</Status> </Messages> 
    <?xml version="1.0" encoding="UTF-8"?> <Messages> <Status>Iam good</Status> </Messages> 
    <?xml version="1.0" encoding="UTF-8"?> <Messages> <Status>Iam good</Status> </Messages> 
    <?xml version="1.0" encoding="UTF-8"?> <Messages> <Status>Iam NOT good</Status> </Messages> 
    <?xml version="1.0" encoding="UTF-8"?> <Messages> <Status>Iam good</Status> </Messages> 
    <?xml version="1.0" encoding="UTF-8"?> <Messages> <Status>Iam NOT good</Status> </Messages> 
    <?xml version="1.0" encoding="UTF-8"?> <Replies> <Start>Lets go</Start> </Replies> 

ので、私は配列として各文字列を得ることができますか?この

_temp[2] = <?xml version="1.0" encoding="UTF-8"?> <Messages> <Status>Iam NOT good</Status> </Messages> 
+1

'[\ r \ n] +'で分割しますか? – BackSlash

+0

@BackSlash xml文字列にmessagesタグの後に "\ r \ n"が含まれています。 – Tirolel

+1

その後、質問を適切な書式で更新してください。完全な文字列があなたが質問に書いた通りであれば、 '[\ r \ n] +'で分割することができます。 – BackSlash

答えて

1

としてあなたは、各<?xml前に分割するために正規表現

(?<!\A)(?=<\?xml) 

を使用して分割することができます。

入力の最初の空白が分割内の自分自身の部分にならないようにするには、入力をtrimにする必要があります。

Javaの例:

String input = " <?xml version=\"1.0\" encoding=\"UTF-8\"?> <Messages> <Status>Iam good</Status> </Messages>\n" 
     + " <?xml version=\"1.0\" encoding=\"UTF-8\"?> <Messages> <Status>Iam good</Status> </Messages>\n" 
     + " <?xml version=\"1.0\" encoding=\"UTF-8\"?> <Messages> <Status>Iam NOT good</Status> </Messages>\n" 
     + " <?xml version=\"1.0\" encoding=\"UTF-8\"?> <Messages> <Status>Iam good</Status> </Messages>\n" 
     + " <?xml version=\"1.0\" encoding=\"UTF-8\"?> <Messages> <Status>Iam good</Status> </Messages>\n" 
     + " <?xml version=\"1.0\" encoding=\"UTF-8\"?> <Messages> <Status>Iam NOT good</Status> </Messages>\n" 
     + " <?xml version=\"1.0\" encoding=\"UTF-8\"?> <Messages> <Status>Iam good</Status> </Messages>\n" 
     + " <?xml version=\"1.0\" encoding=\"UTF-8\"?> <Messages> <Status>Iam good</Status> </Messages>\n" 
     + " <?xml version=\"1.0\" encoding=\"UTF-8\"?> <Messages> <Status>Iam NOT good</Status> </Messages>\n" 
     + " <?xml version=\"1.0\" encoding=\"UTF-8\"?> <Messages> <Status>Iam good</Status> </Messages>\n" 
     + " <?xml version=\"1.0\" encoding=\"UTF-8\"?> <Messages> <Status>Iam NOT good</Status> </Messages>\n" 
     + " <?xml version=\"1.0\" encoding=\"UTF-8\"?> <Replies> <Start>Lets go</Start> </Replies>"; 

String[] parts = input.trim().split("(?<!\\A)(?=<\\?xml)"); 

for (String s : parts) { 
    System.out.println(s); 
    System.out.println("-------------------------"); 
} 

注:<?xmlは例えば、CDATA要素に含めることができるので、これは、すべての可能なXMLSために動作しません<![CDATA[<?xml]]>。これを防ぐには、xmlパーサを使用する必要があります。

+0

答えをありがとう、正規表現は仕事をしました。 – Tirolel

0

私は、インデックスを使用して処理することができる12行のリストを持って、これを実行するには

try { 
     List<String> lines = Files.readAllLines(Paths.get("<XML FILE PATH>"), 
       Charset.defaultCharset()); 
     System.out.println(lines.size()); 
     for (String line : lines) { 
      System.out.println("==============================="); 
      System.out.println(line); 
     } 

    } catch (IOException e) { 

     e.printStackTrace(); 
    } 

を次のようにこれを読んでのもう一つのオプションは、することができます。