我的问题:解析以下信息的好方法是什么?
我有一个Java程序,可以从XML获取它的输入。我有一个功能,如果在处理过程中有任何问题,它将发送错误电子邮件。因为解析XML可能是一个问题,所以我希望有一个能够将电子邮件从xml中正则表达式的功能(因为如果解析是问题所在,那么我无法正常地从xml中获取错误电子邮件)。
要求:
- 我希望能够分别解析 to、cc 和 bcc 属性
- 还有其他元素具有 to、cc 和 bcc 属性
- 空格无关紧要,所以我的示例可能会在换行符上显示属性,但情况并非总是如此。
- 属性的顺序无关紧要。
下面是 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
相匹配。这让我觉得我可能会错过一些案例,这就是为什么我将其作为问题发布的原因。
这件作品会将您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) ;
}
。然后,您可以从该地图中提取您感兴趣的值。
这个问题类似于正则表达式匹配开放标签,除了 XHTML 自包含标签。永远不要使用正则表达式解析 XML 或 HTML。Java 中有许多 XML 解析器实现可以正确执行此任务。阅读文档并逐个解析属性。
没关系,如果用户的XML格式不正确,解析器可以处理很多草率。
/<error_options(?=s)[^>]*?(?<=n)s*to="([^"]*)"/s;
/<error_options(?=s)[^>]*?(?<=n)s*cc="([^"]*)"/s;
/<error_options(?=s)[^>]*?(?<=n)s*bcc="([^"]*)"/s;