Подстрока строки, основанная на условии
У меня есть строка, как показано ниже (читать из файла и хранить в строке)
<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>
2 ответа
Почему бы вам не попытаться проанализировать эту строку как XML с помощью DOM? При этом вам просто нужно сравнить значение каждого "текстового" узла, и, если его значение соответствует, вы возвращаете весь родительский узел, например, String...
Вот базовый пример того, как DOM работает в Java: http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/
Их сочетание может помочь 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
Выполните поиск 'event_code="CP" с помощью find() или match(), если он есть...
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
если они находятся в одном месте, то достаточно просто прочитать оттуда..