我的问题:解析以下信息的好方法是什么?
我有一个java程序,它从XML获取它的输入。我有一个功能,如果处理中有任何问题,将发送错误电子邮件。因为解析XML可能是一个问题,我希望有一个能够从xml中重新编写电子邮件的功能(因为如果解析是问题,那么我无法正常通过xml获取错误电子邮件)。
要求:
以下是xml的一个示例:
<error_options
to="your_email@your_server.com"
cc="cc_error@your_server.com"
bcc="bcc_error@your_server.com"
reply_to="someone_else@their_server.com"
from="bo_error@some_server.org"
subject="Error running System at @@TIMESTAMP@@"
force_send="false"
max_email_size="10485760"
oversized_email_action="zip;split_all"
>
我试过这个error_options.{0,100}?to="(.*?)"
,但这与我匹敌reply_to
。这让我觉得可能有一些我可能会错过的案例,这就是为什么我把这个问题作为一个问题发布的。
答案 0 :(得分:1)
此问题与RegEx match open tags except XHTML self-contained tags类似。永远不要使用正则表达式解析XML或HTML。 Java中有许多XML解析器实现可以正确完成此任务。阅读文档并逐个解析属性。
不要紧,如果用户XML格式不正确,解析器可以处理很多问题。
答案 1 :(得分:1)
/<error_options(?=\s)[^>]*?(?<=\n)\s*to="([^"]*)"/s;
/<error_options(?=\s)[^>]*?(?<=\n)\s*cc="([^"]*)"/s;
/<error_options(?=\s)[^>]*?(?<=\n)\s*bcc="([^"]*)"/s;
答案 2 :(得分:1)
此部分会将String s="<error_options..."
中的所有属性放入地图中:
Pattern p = Pattern.compile("\\s+?(.+?)=\"(.+?)\\s*?\"",Pattern.DOTALL);
Map a = new HashMap() ;
Matcher m = p.matcher(s) ;
while( m.find() ) {
String key = m.group(1).trim() ;
String val = m.group(2).trim() ;
a.put(key, val) ;
}
...然后您可以从该地图中提取您感兴趣的值。