2016-09-26 42 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字符串在消息标记后面已经包含“\ 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("-------------------------"); 
} 

注:这不会对所有可能的个XML工作,因为<?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条线路的列表的另一个选择。