我从第三方服务器获得以下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);
我的计划是,一旦我对此进行了子串,我将使用STAX API将此数据设置为java对象
如果有更好的方法可以告诉我吗?
答案 0 :(得分:3)
使用Jsoup:
String firstT1 = Jsoup.parse(xml).getElementsByTag("t1").first().outerHtml();
答案 1 :(得分:0)
在解析xml标记时,我通常使用split而不是substring。
这样的事情应该有效:
abc.split("<t1>")[1].split("</t1>")[0];
答案 2 :(得分:0)
我的计划是,一旦我对此进行了子串,我将使用STAX API将此数据设置为java对象
错误的计划。当你计划在之后立即将结果传递给真正的解析器时,为什么你会使用容易出错的手动解析呢?
将整个String传递给StAX并仅提取所需的元素。 StAX是一个流API,因此您不会通过预处理字符串来实际节省内存。
答案 3 :(得分:0)
为什么不尝试使用Xpath。它专门为此任务而设计。 Xpath表达式应该类似于“// t1 [first()]”。
对于以下情况,它会更加健壮:
<t1 >
<t1 attribute="foo">
<![CDATA[some user just tiped <t1> in the code ]]>