带有XML外部的条带预贴和附加文本

  • 本文关键字:文本 XML 外部 带有 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>之外的所有响应中的所有内容。

有人给我一个小费吗?

例如:

<?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 "rn";

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

$clean_xml = $open_tag . reset(explode($close_tag,end(explode($open_tag,$xml)))) . $close_tag;
echo $clean_xml;
echo "rn";
$xml = preg_replace('~^.*(<Envelope>.+?</Envelope>).*$~si', '$1', $xml);

尝试这个。懒惰版本:)

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

最新更新