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の位置を見つけるために使用します。2 つの位置の間の文字列を抽出するために使用します (抽出された文字列に終了タグを含めるには、終了タグの位置に 11 を追加する必要があることに注意してください。<Envelope></Envelope>substr

于 2012-11-02T18:13:36.390 に答える