ストンプメッセージを取得するコードがありますが、これは機能します。次に、stompメッセージからxmlを取得して、何かを実行したいと思います。これは、コードがあり、機能します。
課題は、メッセージから断片を取り除き、xmlのみを取得することです。
ストンプメッセージのサンプルを次に示します(はい、データは同じですが、ここでは関係ありません)。
MESSAGE
_HQ_ORIG_ADDRESS:jms.queue.edu
timestamp:1339716293764
redelivered:false
_HQ_ORIG_MESSAGE_ID:xxxxxxxx
expires:0
subscription:subscription/jms.queue.edu
priority:4
message-id:xxxxxxxxxx
destination:jms.queue.edu
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><create><sourceMessageId>4454</sourceMessageId><messageId>3038</messageId><course> <batchUid>ASIA.355.921.2012S1.6733</batchUid><title>ASIA355-921-Chinese Cinema</title><startDate>2012-06-18-07:00</startDate><endDate>2012-09- 21-07:00</endDate><mappedNodeBatchUid>9c0bc373-23a0-4e60-b201- efbbc9bb022e</mappedNodeBatchUid><available>false</available></course></create>
MESSAGE
_HQ_ORIG_ADDRESS:jms.queue.edu
timestamp:1339716293764
redelivered:false
_HQ_ORIG_MESSAGE_ID:xxxxxxxx
expires:0
subscription:subscription/jms.queue.edu
priority:4
message-id:xxxxxxxxxx
destination:jms.queue.edu
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><create><sourceMessageId>4454</sourceMessageId><messageId>3038</messageId><course> <batchUid>ASIA.355.921.2012S1.6733</batchUid><title>ASIA355-921-Chinese Cinema</title><startDate>2012-06-18-07:00</startDate><endDate>2012-09- 21-07:00</endDate><mappedNodeBatchUid>9c0bc373-23a0-4e60-b201- efbbc9bb022e</mappedNodeBatchUid><available>false</available></course></create>
私がやりたいのは、「MESSAGE」から始まり、xmlで始まる各行の前の改行までのメッセージ内のすべての行を削除することです。これにより、xmlパーサーを使用して解析するために必要な結果が得られます。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><create><sourceMessageId>4454</sourceMessageId><messageId>3038</messageId><course> <batchUid>ASIA.355.921.2012S1.6733</batchUid><title>ASIA355-921-Chinese Cinema</title><startDate>2012-06-18-07:00</startDate><endDate>2012-09- 21-07:00</endDate><mappedNodeBatchUid>9c0bc373-23a0-4e60-b201- efbbc9bb022e</mappedNodeBatchUid><available>false</available></course></create>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><create><sourceMessageId>4454</sourceMessageId><messageId>3038</messageId><course> <batchUid>ASIA.355.921.2012S1.6733</batchUid><title>ASIA355-921-Chinese Cinema</title><startDate>2012-06-18-07:00</startDate><endDate>2012-09- 21-07:00</endDate><mappedNodeBatchUid>9c0bc373-23a0-4e60-b201- efbbc9bb022e</mappedNodeBatchUid><available>false</available></course></create>
私は試した:
$xmlstr = preg_replace("/MESSAGE(.*)jms.queue.edu$/ims",'',$msg);
$xmlstr = trim($xmlstr);
ただし、これにより、最初の行の「MESSAGE」の最初の出現からxmlの最後の出現までのすべてが削除されます。つまり、最初の「MESSAGE」と最後の「xml」の間のすべての行が削除されます。
何か案は?私は次のようなさまざまなトリックを使ってみました。正規表現、implode / explode、ファイルへの書き込み/読み取りなど。ただし、上記のpreg_replaceコードは機能していると思います。必要なのは、すべての出現箇所を認識できることだけです。「while」ループまたは「foreach」ループのいずれかが含まれることはわかっていますが、すてきでクリーンなソリューションを楽しみにしています。どんな助けでも大歓迎です。