2014-04-03 3 views
1

я получаю следующий ответ XML от сервера третьей стороныкак сделать подстроку строки в этом случае

<t0> 

<t9>0</t9> 

<t1> 
<t15>DFT</t15> 
<t3>232.15</t3> 
<t6>70</t6> 
<t4>-3.60</t4> 
<t5>-1.53</t5> 
<t7>236.10</t7> 
<t8>237.10</t8> 
<t10>227.50</t10> 
<t11>235.75</t11> 


<t2>Chimera</t2> 

<t58>0.00</t58> 
<t59>0.00</t59> 



<t12>231.72</t12> 
<t19>0</t19> 
<t20>4743</t20> 
<t13>4809774</t13> 
<t17>11145.21</t17> 
<t14>04/03/2014 15:59:16</t14> 



<t25>0</t25> 
<t26>0</t26> 
<t27>0</t27> 
<t28>0</t28> 
<t29>0</t29> 

<t30>0</t30> 
<t31>0</t31> 
<t32>0</t32> 
<t33>0</t33> 
<t34>0</t34> 

<t35>0.00</t35> 
<t36>0.00</t36> 
<t37>0.00</t37> 
<t38>0.00</t38> 
<t39>0.00</t39> 

<t40>35</t40> 
<t41>0</t41> 
<t42>0</t42> 
<t43>0</t43> 
<t44>0</t44> 

<t45>4743</t45> 
<t46>0</t46> 
<t47>0</t47> 
<t48>0</t48> 
<t49>0</t49> 

<t50>232.15</t50> 
<t51>0.00</t51> 
<t52>0.00</t52> 
<t53>0.00</t53> 
<t54>0.00</t54> 

</t1> 



<t1> 
<t2>Chimera</t2> 
<t15>DSF</t15> 
<t3>232.25</t3> 
<t6>25</t6> 
<t4>-3.45</t4> 
<t5>-1.46</t5> 
<t7>236.90</t7> 
<t8>237.50</t8> 
<t10>228.00</t10> 
<t11>235.70</t11> 
<t12>231.72</t12> 
<t19>0</t19> 
<t20>0</t20> 
<t13>699076</t13> 
<t17>1619.90</t17> 
<t14>03/04/2014 16:55:19</t14> 

<t58>0.00</t58> 
<t59>0.00</t59> 


<t25>0</t25> 
<t26>0</t26> 
<t27>0</t27> 
<t28>0</t28> 
<t29>0</t29> 

<t30>0</t30> 
<t31>0</t31> 
<t32>0</t32> 
<t33>0</t33> 
<t34>0</t34> 

<t35>0.00</t35> 
<t36>0.00</t36> 
<t37>0.00</t37> 
<t38>0.00</t38> 
<t39>0.00</t39> 

<t40>0</t40> 
<t41>0</t41> 
<t42>0</t42> 
<t43>0</t43> 
<t44>0</t44> 

<t45>0</t45> 
<t46>0</t46> 
<t47>0</t47> 
<t48>0</t48> 
<t49>0</t49> 

<t50>0.00</t50> 
<t51>0.00</t51> 
<t52>0.00</t52> 
<t53>0.00</t53> 
<t54>0.00</t54> 

</t1> 



</t0> 

мне нужно взять только первые данные t1 и устранить оставшиеся, то есть выходной хотел

<t1> 
<t15>DFT</t15> 
<t3>232.15</t3> 
<t6>70</t6> 
<t4>-3.60</t4> 
<t5>-1.53</t5> 
<t7>236.10</t7> 
<t8>237.10</t8> 
<t10>227.50</t10> 
<t11>235.75</t11> 


<t2>Chimera</t2> 

<t58>0.00</t58> 
<t59>0.00</t59> 



<t12>231.72</t12> 
<t19>0</t19> 
<t20>4743</t20> 
<t13>4809774</t13> 
<t17>11145.21</t17> 
<t14>04/03/2014 15:59:16</t14> 



<t25>0</t25> 
<t26>0</t26> 
<t27>0</t27> 
<t28>0</t28> 
<t29>0</t29> 

<t30>0</t30> 
<t31>0</t31> 
<t32>0</t32> 
<t33>0</t33> 
<t34>0</t34> 

<t35>0.00</t35> 
<t36>0.00</t36> 
<t37>0.00</t37> 
<t38>0.00</t38> 
<t39>0.00</t39> 

<t40>35</t40> 
<t41>0</t41> 
<t42>0</t42> 
<t43>0</t43> 
<t44>0</t44> 

<t45>4743</t45> 
<t46>0</t46> 
<t47>0</t47> 
<t48>0</t48> 
<t49>0</t49> 

<t50>232.15</t50> 
<t51>0.00</t51> 
<t52>0.00</t52> 
<t53>0.00</t53> 
<t54>0.00</t54> 

</t1> 

Я попробовал этот путь, но это Виль неудачу, если его другой символ

int a = abc.indexOf("<t1>"); 
      int b = abc.indexOf("</t1>"); 

      System.out.println(a); 
      System.out.println(b); 
      String newstr = abc.substring(24, 848); 

Мой план состоит в том, что как только я подстрою это, я установил эти данные в объект Java с помощью STAX API

Пожалуйста, дайте мне знать, если есть лучший способ сделать это ???

+2

HTML парсеры существуют также. – devnull

+0

Что вы подразумеваете под другим символом? – anonymous

ответ

3

Использование Jsoup:

String firstT1 = Jsoup.parse(xml).getElementsByTag("t1").first().outerHtml(); 
+0

отлично это отлично работало, спасибо вам очень. – Pawan

+0

Рад, что это помогло :) –

+0

как я могу прочитать отдельные теги, такие как , из строки ?? делает jsoup suppourt, что ?? – Pawan

0

Обычно я использую разделение вместо подстроки при разборе тэгов xml.

Что-то, как это должно работать:

abc.split("<t1>")[1].split("</t1>")[0]; 
0

Мой план состоит в том, что когда-то я подстроки это, я Виль установить эти данные в объект Java с использованием API STAX

Неправильный план. Почему, черт возьми, вы использовали бы русскую синтаксическую разборку с ошибками, когда вы планируете передать результат в реальный парсер сразу после?

Передайте всю строку в StAX и извлеките только те элементы, которые вы хотите. StAX - это потоковый API, поэтому вы фактически не сохраните память, предварительно обработав строку.

0

Почему бы вам не попробовать использовать Xpath. Это было специально разработано для этой задачи. Выражение Xpath должно быть чем-то вроде «// t1 [first()]».

Это будет гораздо более надежными для случаев, таких как:

  • <t1 >
  • <t1 attribute="foo">
  • <![CDATA[some user just tiped <t1> in the code ]]>

См: How to read XML using XPath in Java

Смежные вопросы