我们为第三方提供了一个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>
之外的响应中的所有内容。
任何人都有我的小费?
答案 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以在提取的字符串中包含结束标记。