You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP提取日志文件中XML片段的unique_id与transaction_id

PHP提取混合文本中XML片段的unique_id与transaction_id

方法一:拆分交易块后解析XML

针对这种前缀+XML片段的混合格式,先拆分独立交易单元再解析XML的方式兼容性更强:

  1. 读取整个文件内容到字符串;
  2. 利用交易开头的时间戳特征,分割出每个完整的交易块;
  3. 从每个块中提取XML片段,还原转义的标签字符;
  4. 用PHP原生XML解析工具提取目标字段。

代码示例:

$fileContent = file_get_contents('transaction_log.txt');

// 按交易起始的时间戳分割,保留每个交易的完整内容
$transactions = preg_split('/(?=^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} - Transaction)/m', $fileContent);
$transactions = array_filter($transactions); // 过滤空元素

$extractedData = [];
foreach ($transactions as $block) {
    // 还原转义的XML标签,提取完整XML片段
    $decodedBlock = htmlspecialchars_decode($block);
    if (preg_match('/(<\?xml.*?<\/payment_response>)/s', $decodedBlock, $xmlMatches)) {
        try {
            $xml = new SimpleXMLElement($xmlMatches[1]);
            $extractedData[] = [
                'transaction_id' => (string)$xml->transaction_id,
                'unique_id' => (string)$xml->unique_id
            ];
        } catch (Exception $e) {
            // 记录解析失败的交易块,避免中断流程
            error_log("XML解析失败:{$e->getMessage()}\n原始块内容:{$block}");
            continue;
        }
    }
}

// 输出提取结果
print_r($extractedData);

方法二:直接正则匹配目标字段

如果确认所有交易的XML结构完全固定,可跳过XML解析,直接用正则匹配字段,效率更高:

$fileContent = file_get_contents('transaction_log.txt');
$decodedContent = htmlspecialchars_decode($fileContent);

// 批量匹配所有transaction_id和对应的unique_id
preg_match_all(
    '/<transaction_id>(.*?)<\/transaction_id>.*?<unique_id>(.*?)<\/unique_id>/s',
    $decodedContent,
    $matches,
    PREG_SET_ORDER
);

$extractedData = [];
foreach ($matches as $match) {
    $extractedData[] = [
        'transaction_id' => trim($match[1]),
        'unique_id' => trim($match[2])
    ];
}

print_r($extractedData);

关键注意点

  • 必须先通过htmlspecialchars_decode将&lt;/&gt;还原为</>,否则正则或XML解析无法识别标签;
  • 加入错误捕获逻辑,避免单个格式异常的交易块导致整个脚本终止;
  • 350个交易的量级极小,两种方法都能轻松处理,无需优化性能。

内容的提问来源于stack exchange,提问作者Adrian Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:03:22