我的xml字符串是:
String neMsg= "<root>"
+" <CONTENT>"
+" <![CDATA[00000:<ResponseClass Name=\"Response\"><ITEM>HAHA</ITEM></ResponseClass>]]>"
+" </CONTENT>"
+"</root>";
我试过用四种方法编写代码,但仍然无法获取内容。我该如何解决这个问题?
//java.util.regex.Pattern pP0=java.util.regex.Pattern.compile("<!\\[CDATA\\[00000:(\\s|\\S)*?\\]\\]>");
// java.util.regex.Pattern pP0=java.util.regex.Pattern.compile("<!\\[CDATA\\[00000:(.*)\\]\\]>");
// java.util.regex.Pattern pP0=java.util.regex.Pattern.compile("<CONTENT>(.*)<!\\[CDATA\\[(.*)\\]\\]>(.*)</CONTENT>");
Pattern pP0 = Pattern.compile(".*<!\\[CDATA\\[00000:(.*)\\]\\]>.*");
java.util.regex.Matcher mP0= pP0.matcher(neMsg);
System.out.println(mP0.group(1));
你永远不应该用正则表达式解析HTML,而是可以使用像JSoup这样的HTML解析器。
这里的问题是,你需要首先调用matcherObject.find()
(用于在字符串中的任何位置查找模式)或matcherObject.matches()
(使用此用于匹配整个字符串与模式)方法,然后才能访问匹配,并且您应该首先通过使用find
或matches
循环检查if
或while
的值是否为真。你还需要调用group(1)
而不是group(0)
(这将返回整个匹配)来访问group1中的内容。
将您的代码更改为此,
String neMsg = "<root>" + " <CONTENT>"
+ " <![CDATA[00000:<ResponseClass Name=\"Response\"><ITEM>HAHA</ITEM></ResponseClass>]]>"
+ " </CONTENT>" + "</root>";
Pattern pP0 = Pattern.compile(".*<!\\[CDATA\\[00000:(.*)\\]\\]>.*");
java.util.regex.Matcher mP0 = pP0.matcher(neMsg);
if (mP0.find()) { // matches method will also work because your pattern is wrapped with `.*` from both sides
System.out.println(mP0.group(1));
}
打印整场比赛,
<ResponseClass Name="Response"><ITEM>HAHA</ITEM></ResponseClass>