我有一个如下的字符串(从文件中读取并存储在字符串中)
<textmessages>
<textMessage timestamp="1424708212905">
<property name="tcs_car_kind" value="M32"/>
<property name="prev_cmdy_abrv" value="AUTOS"/>
<text><![CDATA[event_code="AP"]]></text>
</textMessage>
<textMessage timestamp="1424708212902">
<property name="shp_prim" value=""/>
<property name="prev_cmdy_abrv" value="AUTOS"/>
<text><![CDATA[event_code="CP"]]></text>
</textMessage>
<textMessage timestamp="1424708212902">
<property name="co_part_frm_nbr" value=""/>
<property name="prev_cmdy_abrv" value="AUTOS"/>
<text><![CDATA[event_code="LP"]]></text>
</textMessage>
</textmessages>
要求:
如果字符串值与'event_code="CP"'匹配,则我需要返回<textmessage> ---- </textmessage>
之间的完整数据,如下所示。
<textMessage timestamp="1424708212902">
<property name="co_part_frm_nbr" value=""/>
<property name="shp_prim" value=""/>
<property name="prev_cmdy_abrv" value="AUTOS"/>
<text><![CDATA[event_code="CP"]]></text>
</textMessage>
这些组合可能会有所帮助http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.htmlhttp://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html
搜索'event_code="CP"带有find()或match()如果有。。。
Pattern p = Pattern.compile("pattern here");
if(p.matcher(content).find()){...}
另一种选择是使用xml解析,但regex对于您想要的内容来说非常简单。
如果模式真的是恒定的,你甚至可以使用indexOf来加快搜索速度。。。http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(java.lang.String)
如果他们在同一个位置,那么仅仅从那里阅读就足够了。。
为什么不尝试使用DOM将该字符串解析为XML?有了这个,你只需要比较每个"文本"节点的值,如果它的值匹配,你就会返回整个父节点,例如String。。。
以下是it DOM在Java中如何工作的基本示例:http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/