Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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_Soap_Xsd - Fatal编程技术网

php加载XML字符串

php加载XML字符串,php,xml,soap,xsd,Php,Xml,Soap,Xsd,我有一个xsd字符串,需要获取标记status和标记itens/seloRecebimento中的内容,并将其像表格一样放置 我需要的是: $status = 0; // or 1 itens/seloRecebimento上的标签内容如下: 4 AAA034593 A1B2 4 AAA034594 A1B2 下面是xsd字符串: $string = '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/

我有一个xsd字符串,需要获取标记status和标记itens/seloRecebimento中的内容,并将其像表格一样放置

我需要的是:

$status = 0; // or 1
itens/seloRecebimento上的标签内容如下:

  • 4 AAA034593 A1B2
  • 4 AAA034594 A1B2
  • 下面是xsd字符串:

    $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>';
    
    结果是:

    Array ( [0] => 1 MSG037 0 Item da solicitação já foi entregue para serventia. 4 AAA034593 A1B2 4 AAA034594 A1B2 ) 
    

    目前,您正在转储所有
    domeElement
    内容。这段代码使用XPath来挑选所需的位并将它们放入数组中

    每个XPath都从您使用的当前元素开始作为上下文,并使用
    后代::
    确保它获取元素内的数据。还可以使用
    evaluate()
    ,因为这样可以返回字符串值

    $domDocument = new DOMDocument();
    $domDocument->loadXML($string);
    $xp = new DOMXPath($domDocument);
    
    $selos = array();
    $selos_r = $domDocument->getElementsByTagName("itens");
    foreach($selos_r as $selos_rs){
        $status = $xp->evaluate('string(descendant::status/status)', $selos_rs);
        foreach($selos_rs->getElementsByTagName("seloRecebimento") as $s)    {
            $codigo = $xp->evaluate('string(descendant::codigo)', $s);
            $numeroSerie = $xp->evaluate('string(descendant::numeroSerie)', $s);
            $validador = $xp->evaluate('string(descendant::validador)', $s);
            $selos[] = [$status, $codigo, $numeroSerie, $validador];
        }
    }
    
    print_r($selos);
    
    $domDocument = new DOMDocument();
    $domDocument->loadXML($string);
    $xp = new DOMXPath($domDocument);
    
    $selos = array();
    $selos_r = $domDocument->getElementsByTagName("itens");
    foreach($selos_r as $selos_rs){
        $status = $xp->evaluate('string(descendant::status/status)', $selos_rs);
        foreach($selos_rs->getElementsByTagName("seloRecebimento") as $s)    {
            $codigo = $xp->evaluate('string(descendant::codigo)', $s);
            $numeroSerie = $xp->evaluate('string(descendant::numeroSerie)', $s);
            $validador = $xp->evaluate('string(descendant::validador)', $s);
            $selos[] = [$status, $codigo, $numeroSerie, $validador];
        }
    }
    
    print_r($selos);