2015-02-26 2 views
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> 
+0

использовать stingtokenizer, но не использовать .. :( – Dileep

+0

использовать парсер DOM или SAX. Я вижу, что кто-то уже предложил DOM, поэтому здесь SAX: http://docs.oracle.com/javase/7/docs /api/javax/xml/parsers/SAXParser.html – Ian2thedv

ответ

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

Поиск «EVENT_CODE = "СР" с находкой() или матч() если есть ...

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)

, если они находятся на том же месте, то просто чтение оттуда достаточно ..

0

Почему вы не пытаетесь разобрать эту строку как XML с помощью DOM? С этим вам просто нужно сравнить значение каждого «текстового» узла и, если оно соответствует значению, вы вернете весь родительский узел, например, в виде строки ...

Вот базовый пример того, как он работает в DOM Java: http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/