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