0

我的问题:解析以下信息的好方法是什么?

我有一个从 XML 获取输入的 java 程序。我有一个功能,如果处理过程中出现任何问题,它会发送一封错误电子邮件。因为解析 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。这让我觉得可能有一些我可能会错过的案例,这就是我将其作为问题发布的原因。

4

3 回答 3

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

...然后您可以从该地图中提取您感兴趣的值。

于 2012-07-03T15:53:51.640 回答
1

这个问题类似于RegEx match open tags except XHTML self-contained tags。永远不要使用正则表达式解析 XML 或 HTML。Java 中有许多 XML 解析器实现来正确执行此任务。阅读文档并一一解析属性。

不要介意,如果用户的 XML 格式不正确,解析器可以处理很多草率。

于 2012-07-03T15:25:43.047 回答
1
/<error_options(?=\s)[^>]*?(?<=\n)\s*to="([^"]*)"/s;
/<error_options(?=\s)[^>]*?(?<=\n)\s*cc="([^"]*)"/s;
/<error_options(?=\s)[^>]*?(?<=\n)\s*bcc="([^"]*)"/s;
于 2012-07-03T15:26:19.133 回答