从外部XML中删除前置和附加文本

时间:2012-11-02 18:04:13

标签: php xml

我们为第三方提供了一个PHP XML RPC,他们遇到了在XML体外返回其他文本的问题,如

133
<Envelope>
<Body>
<RESULT>
<SUCCESS>true</SUCCESS>
<SESSIONID>99B153C1DFA889C34213B</SESSIONID>
<ORGANIZATION_ID>f528764d624db129b32c21fbca0cb8d6</ORGANIZATION_ID>
<SESSION_ENCODING>;jsessionid=99B153C1DFA889C34213B</SESSION_ENCODING>
</RESULT>
</Body>
</Envelope>

0

附加文字各不相同,并不总是数字。他们的工作人员正在研究这个问题,但在此期间,如果使用PHP,我可以干净地消除<Envelope></Envelope>之外的响应中的所有内容。

任何人都有我的小费?

3 个答案:

答案 0 :(得分:1)

例如:

<?php

$xml = '133
<Envelope>
<Body>
<RESULT>
<SUCCESS>true</SUCCESS>
<SESSIONID>99B153C1DFA889C34213B</SESSIONID>
<ORGANIZATION_ID>f528764d624db129b32c21fbca0cb8d6</ORGANIZATION_ID>
<SESSION_ENCODING>;jsessionid=99B153C1DFA889C34213B</SESSION_ENCODING>
</RESULT>
</Body>
</Envelope>

0';

$open_tag = '<Envelope>';
$close_tag = '</Envelope>';

$start_index = strpos($xml,$open_tag);
$length = strpos($xml, $close_tag) - $start_index + strlen($close_tag);
$clean_xml = substr($xml, $start_index, $length);

echo $clean_xml;

echo "\r\n";

其他解决方案,内联但不那么优雅:

$clean_xml = $open_tag . reset(explode($close_tag,end(explode($open_tag,$xml)))) . $close_tag;

echo $clean_xml;

echo "\r\n";

答案 1 :(得分:1)

$xml = preg_replace('~^.*(<Envelope>.+?</Envelope>).*$~si', '$1', $xml);

试试这个。懒人版:)

答案 2 :(得分:0)

有很多方法。您可以使用preg_match和正则表达式来获取数据或简单的字符串匹配。由于你有一个明确定义的起点和终点,我可能会选择字符串匹配。简单地说,将整个响应读入字符串。使用strpos查找<Envelope></Envelope>的位置。只需使用substr来提取两个位置之间的字符串(请注意,您需要在结束标记的位置添加11以在提取的字符串中包含结束标记。