2016-09-26 3 views
0

Мне было интересно, есть ли способ разделить строки xml.Сплит xml сообщения от String

У меня есть строка здесь:

<?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 уже содержит «\ r \ n» после тега сообщений. – Tirolel

+1

Затем обновите свой вопрос при правильном форматировании. Если полная строка, как вы писали в вопросе, будет работать расщепление на '[\ r \ n] +'. – BackSlash

ответ

1

Вы можете разделить с использованием регулярных выражений

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

расколоть перед каждым <?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("-------------------------"); 
} 

Примечание: Это не будет работать для всех возможных XMLs, так как <?xml могут быть включены в CDATA элемент, например, <![CDATA[<?xml]]>. Чтобы этого не произошло, вам нужно будет использовать XML-парсер.

+0

Спасибо за ответ, регулярное выражение выполнило эту работу. – Tirolel

0

Другой вариант прочтения этого может быть следующим

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

На это работает я получил список из 12 строк, которые затем могут быть обработаны с использованием индекса.

Смежные вопросы