无法使用Java“Pattern”和“Matcher”解析多行XML消息

时间:2014-10-08 08:14:08

标签: java xml regex pattern-matching

我无法使用Pattern.compile(正则表达式)解析多行XML消息有效负载。但是,如果我将相同的消息单行显示给它我预期的结果。例如,如果我解析

<Document> <RGOrdCust50K5s0F> AccName AccNo AccAddress </RGOrdCust50K50F> </Document>

它给了我RGOrdCust50K50F&gt;标记值为:AccName AccNo AccAddress 但如果我使用多行,如

<Document> <RGOrdCust50K50F>AccNo 
 AccName 
 AccAddress   </RGOrdCust50K50F></Document>

通过ava.lang.IllegalStateException:找不到匹配项

我用来测试它的Testcase代码如下所示

public class ParseXMLMessage {
    public static void main(String[] args) {
        String fldName = "RGOrdCust50K50F";
     String message="<?xml version=1.0 encoding=UTF-8?> <Document><RGOrdCust50K50F>1234
     ABCD
     LONDON,UK </RGOrdCust50K50F></Document>";
String fldValue = getTagValue(fldName, message);
    System.out.println("fldValue:"+fldValue);


    }

    private static String getTagValue(String tagName, String message) {
        String regex = "(?<=<" + tagName + ">).*?(?=</" + tagName + ">)";
            System.out.println("regex:"+regex);
        Pattern pattern = Pattern.compile(regex);
        System.out.println("pattern:"+pattern);
        Matcher matcher = pattern.matcher(message);
        System.out.println("matcher:"+matcher);
        matcher.find(0);
        String tagValue = null;
        try {
            tagValue = matcher.group();
        } catch (IllegalStateException isex) {
            System.out.println("No Tag/Match found " + isex.getMessage());
        }
        return tagValue;
    }
}

作为一项商业要求,我需要制作消息,但是当我发布消息时,我会得到例外。 我无法解决这个问题请注意,如果有任何问题,请注意&#39; REGEX&#39;表达我正在使用我是否需要使用&#39; / n&#39;在Regex表达解决这个问题。亲切协助

2 个答案:

答案 0 :(得分:1)

如果要解析XML,请使用XML解析器来执行此操作 - 当您发现越来越多无法充分处理的情况时,您的REGEX将变得越来越复杂和脆弱。

有大量成熟稳定的XML处理库。我倾向于坚持我所知道的,jdom有一个非常浅的学习曲线,并且很容易处理这种处理。

答案 1 :(得分:0)

问题取决于'。'元字符。见http://docs.oracle.com/javase/tutorial/essential/regex/pre_char_classes.html

.   Any character (may or may not match line terminators)

尝试使用以下代码:

Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE| Pattern.DOTALL);

请检查以下主题:java regex string matches and multiline delimited with new line