Php 从外部XML中剥离前置和追加的文本

Php 从外部XML中剥离前置和追加的文本,php,xml,Php,Xml,我们向第三方提供了一个PHP XML RPC,他们在返回XML正文之外的其他文本时遇到了问题,如 133 <Envelope> <Body> <RESULT> <SUCCESS>true</SUCCESS> <SESSIONID>99B153C1DFA889C34213B</SESSIONID> <ORGANIZATION_ID>f528764d624db129b32c21fbca0cb8d6<

我们向第三方提供了一个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
133
真的
99B153C1DFA889C34213B
f528764d624db129b32c21fbca0cb8d6
;jsessionid=99B153C1DFA889C34213B
0
附加文本各不相同,并不总是数字。他们的工作人员正在处理这个问题,但在此期间,如果使用PHP我可以完全消除他们响应中
之外的所有内容,那就太好了


有人给我一个建议吗?

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

例如:

<?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";
$xml=preg_replace(“~^.*(.+?).$~si',“$1',$xml);
试试这个。懒惰版本:)

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

echo $clean_xml;

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