0

我有一个如下所示的字符串(从文件中读取并存储在字符串中)

<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>
4

2 回答 2

0

为什么不尝试使用 DOM 将该字符串解析为 XML 呢?有了这个,你只需要比较每个“文本”节点的值,如果它的值匹配你返回整个父节点,例如字符串......

这是 DOM 在 Java 中如何工作的基本示例:http ://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/

于 2015-02-26T09:19:21.253 回答
0

这些的组合可能会有所帮助http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html http://docs.oracle.com/javase/7/docs/api /java/util/regex/Matcher.html

使用 find() 或 match() 搜索 'event_code="CP" 如果有...

Pattern p = Pattern.compile("pattern here"); if(p.matcher(content).find()){...}

其他选项是使用 xml 解析,但正则表达式对于您想要的非常简单。

如果模式真的是恒定的,你甚至可以使用 indexOf 来更快地搜索... http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(java .lang.String)

如果它们在同一个位置,那么只需从那里读取就足够了..

于 2015-02-26T08:54:44.420 回答