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

PHP解析SOAP XML:提取status与itens/seloRecebimento内容并格式化

提取SOAP XML中的状态值与印章信息并整理为表格

我来帮你完善代码,精准提取目标数据并按要求输出。你的原始代码只是把节点文本拼接在一起,没有结构化提取,我们来调整一下:

完整解决方案代码

$string = '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns4:receberSelosResponse xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" xmlns:ns3="http://www.tjce.jus.br/selodigital/schemas" xmlns:ns4="http://service.recebimento.selodigital.tjce.jus.br/"> <return> <cabecalho> <versao>1.12</versao> <dataHora>2019-12-30T08:17:17.425-03:00</dataHora> <ambiente>2</ambiente> <serventia> <codigoServentia>000309</codigoServentia> </serventia> </cabecalho> <itens> <itemSolicitacao> <sequencial>1</sequencial> <status> <codigo>MSG037</codigo> <status>0</status> <mensagem>Item da solicitação já foi entregue para serventia.</mensagem> </status> <seloRecebimento> <codigoSelo> <codigo>4</codigo> </codigoSelo> <numeroSerie>AAA034593</numeroSerie> <validador>A1B2</validador> </seloRecebimento> <seloRecebimento> <codigoSelo> <codigo>4</codigo> </codigoSelo> <numeroSerie>AAA034594</numeroSerie> <validador>A1B2</validador> </seloRecebimento> </itemSolicitacao> </itens> </return> </ns4:receberSelosResponse> </soap:Body> </soap:Envelope>';

// 初始化DOM解析器,抑制命名空间相关警告
$domDocument = new DOMDocument();
libxml_use_internal_errors(true);
$domDocument->loadXML($string);
libxml_clear_errors();

// 提取目标状态值到$status
$status = null;
$statusContainers = $domDocument->getElementsByTagName('status');
foreach ($statusContainers as $container) {
    // 找到嵌套在容器内的<status>子节点(值为0/1的目标节点)
    $targetStatus = $container->getElementsByTagName('status')->item(0);
    if ($targetStatus instanceof DOMElement) {
        $status = $targetStatus->textContent;
        break; // 找到后直接退出循环,避免多余遍历
    }
}

// 提取所有印章信息并结构化存储
$selosList = [];
$seloNodes = $domDocument->getElementsByTagName('seloRecebimento');
foreach ($seloNodes as $selo) {
    // 逐个提取印章的三个字段
    $codigo = $selo->getElementsByTagName('codigo')->item(0)->textContent;
    $numeroSerie = $selo->getElementsByTagName('numeroSerie')->item(0)->textContent;
    $validador = $selo->getElementsByTagName('validador')->item(0)->textContent;
    
    $selosList[] = [
        'codigo' => $codigo,
        'numeroSerie' => $numeroSerie,
        'validador' => $validador
    ];
}

// 输出结果
echo "提取的状态值 \$status: {$status}\n\n";

// 输出Markdown格式的表格
echo "### 印章信息表格\n";
echo "| 代码 | 序列号 | 验证码 |\n";
echo "|------|--------|--------|\n";
foreach ($selosList as $selo) {
    echo "| {$selo['codigo']} | {$selo['numeroSerie']} | {$selo['validador']} |\n";
}

// 输出你示例中的纯文本格式
echo "\n### 纯文本格式输出\n";
foreach ($selosList as $selo) {
    echo "{$selo['codigo']} {$selo['numeroSerie']} {$selo['validador']} ";
}
echo "\n";

代码关键点说明

  • 抑制XML警告:因为SOAP XML包含多个命名空间,解析时会产生无关警告,用libxml_use_internal_errors(true)可以屏蔽这些干扰。
  • 精准提取状态值:XML里有两层<status>节点,外层是状态容器,内层才是值为0/1的目标节点,所以需要嵌套查找。
  • 结构化存储印章数据:把每个印章的三个字段存为数组,后续可以灵活输出成表格或纯文本格式。
  • 两种输出格式:既提供了清晰的Markdown表格,也保留了你示例中的纯文本拼接格式,按需使用即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:09:43