Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP删除重复删除特定文本后的行以查找XML_Php_Xml_Stomp - Fatal编程技术网

PHP删除重复删除特定文本后的行以查找XML

PHP删除重复删除特定文本后的行以查找XML,php,xml,stomp,Php,Xml,Stomp,我有代码来检索stomp消息,这很有效。然后,我想从stomp消息中提取xml来处理这些事情,我已经为它们编写了代码,并且可以正常工作 面临的挑战是从消息中去掉粗枝大叶,只获取xml 以下是stomp消息的示例(是的,数据相同,但与此无关): 但这会删除第一行上第一次出现“MESSAGE”和最后一次出现xml之间的所有内容。换句话说,第一条“消息”和最后一条“xml”之间的所有行都将被删除 有什么想法吗?我尝试过使用各种技巧,包括;regex、内爆/分解、写入/读取文件等。但我觉得上面的preg

我有代码来检索stomp消息,这很有效。然后,我想从stomp消息中提取xml来处理这些事情,我已经为它们编写了代码,并且可以正常工作

面临的挑战是从消息中去掉粗枝大叶,只获取xml

以下是stomp消息的示例(是的,数据相同,但与此无关):

但这会删除第一行上第一次出现“MESSAGE”和最后一次出现xml之间的所有内容。换句话说,第一条“消息”和最后一条“xml”之间的所有行都将被删除


有什么想法吗?我尝试过使用各种技巧,包括;regex、内爆/分解、写入/读取文件等。但我觉得上面的preg_replace代码可以工作,它只需要能够识别所有发生的情况。我知道这将涉及“while”或“foreach”循环,但我期待一个好的、干净的解决方案。非常感谢您的帮助。

请在
*
之后使用

或者,尝试以下方法:

list(,$body) = explode("\r\n\r\n",$msg); // adjust line ending as needed
list($xmlstr) = explode("\r\n",$body);

这将得到包含所有XML的行。

谢谢。列表结果用于抓取第一个xml,但不抓取其余的xml—在$msg中大约有83个条目:list(,$body)=explode(“\n\n”,$msg);列表($xmlstr)=分解(“\n”,$body);preg mod工作正常,但还有第二条“消息”影响了结果:HQ_ORIG_MESSAGE_ID.$xmlstr=preg_replace(“/^MESSAGE(.*jms.queue.edu$/sm)”,“,$msg)$xmlstr=trim($xmlstr);固定的。这不是第二条消息,而是第二条jms.queue.edu。我改为“/^MESSAGE(.*)目的地:jms.queue.edu$/sm”,它成功了。谢谢你的帮助!
    <?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);
list(,$body) = explode("\r\n\r\n",$msg); // adjust line ending as needed
list($xmlstr) = explode("\r\n",$body);