0

我们有一个我们向第三方制作的 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>.

有人给我小费吗?

4

3 回答 3

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";
于 2012-11-02T18:18:57.210 回答
1
$xml = preg_replace('~^.*(<Envelope>.+?</Envelope>).*$~si', '$1', $xml);

试试这个。懒惰的版本:)

于 2012-11-02T18:33:16.993 回答
0

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

于 2012-11-02T18:13:36.390 回答