2016-07-21 83 views
0

我正在寫一個代碼使用web服務,幾乎發送一個地址信息,並使用巴西快遞公司返回一個跟蹤代碼和貨件信息。PHP Webservice XML輸出/標籤元素值

的代碼是:

$url = "http://vpsrv.visualset.com.br/?wsdl"; 
$client = new SoapClient($url); 


$parametrosVipp = new stdClass(); 

$parametrosVipp->PostagemVipp = new stdClass(); 

//webservice access data 
$parametrosVipp->PostagemVipp->PerfilVipp = new stdClass(); 
$parametrosVipp->PostagemVipp->PerfilVipp->Usuario = "webservice"; 
$parametrosVipp->PostagemVipp->PerfilVipp->Token = "testewebservice"; 
$parametrosVipp->PostagemVipp->PerfilVipp->IdPerfil = "605"; 

//webservice address data 
$parametrosVipp->PostagemVipp->Destinatario = new stdClass(); 
$parametrosVipp->PostagemVipp->Destinatario->CnpjCpf = "33323884845"; 
$parametrosVipp->PostagemVipp->Destinatario->Nome = "Rafael Ferreira"; 
$parametrosVipp->PostagemVipp->Destinatario->Endereco = "Al Americana"; 
$parametrosVipp->PostagemVipp->Destinatario->Numero = "156"; 
$parametrosVipp->PostagemVipp->Destinatario->Complemento = "casa"; 
$parametrosVipp->PostagemVipp->Destinatario->Bairro = "Jd Paulista"; 
$parametrosVipp->PostagemVipp->Destinatario->Cidade = "Vinhedo"; 
$parametrosVipp->PostagemVipp->Destinatario->UF = "SP"; 
$parametrosVipp->PostagemVipp->Destinatario->Cep = "13280000"; 

//store order number 
$parametrosVipp->PostagemVipp->NotasFiscais = new stdClass(); 
$parametrosVipp->PostagemVipp->NotasFiscais->NotaFiscal = new stdClass(); 
$parametrosVipp->PostagemVipp->NotasFiscais->NotaFiscal->NrNotaFiscal = "11223344"; 

//package info 
$parametrosVipp->PostagemVipp->Volumes = new stdClass(); 
$parametrosVipp->PostagemVipp->Volumes->VolumeObjeto = new stdClass(); 
$parametrosVipp->PostagemVipp->Volumes->VolumeObjeto->Peso = "?"; 
$parametrosVipp->PostagemVipp->Volumes->VolumeObjeto->Altura = "?"; 
$parametrosVipp->PostagemVipp->Volumes->VolumeObjeto->Largura = "?"; 
$parametrosVipp->PostagemVipp->Volumes->VolumeObjeto->Comprimento = "?"; 
$parametrosVipp->PostagemVipp->Volumes->VolumeObjeto->CodigoBarraVolume = "?"; 
$parametrosVipp->PostagemVipp->Volumes->VolumeObjeto->CodigoBarraCliente = "?"; 
$parametrosVipp->PostagemVipp->Volumes->VolumeObjeto->ObservacaoVisual = "?"; 
$parametrosVipp->PostagemVipp->Volumes->VolumeObjeto->Conteudo = "?"; 
$parametrosVipp->PostagemVipp->Volumes->VolumeObjeto->AdicionaisVolume = "?"; 
$parametrosVipp->PostagemVipp->Volumes->VolumeObjeto->Etiqueta = "?"; 


$obj = new ObjectAndXML(); 

$retorno = $client->PostarObjeto($parametrosVipp); 
$recordsXML = $obj->objToXML($retorno); 

var_dump($recordsXML); 

preg_match('#<Postagem>(.*?)</Postagem>#', $recordsXML, $match); 

print_r($match); 

因此,當我打電話 - > PostarObjeto方法返回我下面的XML:

<Postagem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns=""> 
<ContratoEct> 
<NrContrato>9912329784</NrContrato><CodigoAdministrativo>0013291092</CodigoAdministrativo><NrCartao>0067335344</NrCartao> 
</ContratoEct> 
<Destinatario> 
<CnpjCpf>37323884845</CnpjCpf> 
<IeRg/><Nome>Rafael Ferreira</Nome> 
<Endereco>Al Americana</Endereco> 
<Numero>156</Numero> 
<Complemento>casa</Complemento> 
<Bairro>Jd Paulista</Bairro> 
<Cidade>Vinhedo</Cidade> 
<UF>SP</UF> 
<Cep>13280000</Cep> 
<Telefone/><TelefoneSMS/><Email/> 
</Destinatario> 
<Servico> 
<ServicoECT>41068</ServicoECT> 
</Servico> 
<NotasFiscais> 
<NotaFiscal> 
<DtNotaFiscal/><SerieNotaFiscal/><NrNotaFiscal>11223344</NrNotaFiscal><VlrTotalNota/> 
</NotaFiscal></NotasFiscais> 
<Volumes> 
<VolumeObjeto> 
<Peso>0</Peso> 
<Cubagem>117</Cubagem> 
<Altura>4</Altura> 
<Largura>11</Largura> 
<Comprimento>16</Comprimento> 
<CodigoBarraVolume>?</CodigoBarraVolume> 
<CodigoBarraCliente>?</CodigoBarraCliente> 
<ObservacaoVisual>?</ObservacaoVisual> 
<PosicaoVolume>1</PosicaoVolume> 
<Conteudo>?</Conteudo> 
<ValorDeclarado/> 
<AdicionaisVolume>?</AdicionaisVolume><VlrACobrar/> 
<Etiqueta>PZ000000822BR</Etiqueta> 
<ValorTarifa>10.96</ValorTarifa 
><ValorAdicionais>0.00</ValorAdicionais> 
<ValorPostagem>10.96</ValorPostagem> 
<StEntregaSabado>0</StEntregaSabado> 
<StEntregaDomiciliar>1</StEntregaDomiciliar> 
<DiasUteisPrazo>5</DiasUteisPrazo> 
</VolumeObjeto> 
</Volumes> 
<ListaErros/> 
<StatusPostagem>Valida</StatusPostagem> 
</Postagem> 

我需要讓標籤<Etiqueta>PZ000000822BR</Etiqueta>之間的值。我嘗試了大部分我在這裏找到的解決方案,例如DOMElement,simplexml,REGEX,但都沒有成功。我可能做錯了什麼,但我不知道它是什麼,因爲我沒有很多的web服務經驗。

謝謝大家,並對可憐的英語感到抱歉。

回答

0

假設你的XML作爲$data你可以做到以下幾點:

$data = '<Postagem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns=""> 
<ContratoEct> 
<NrContrato>9912329784</NrContrato><CodigoAdministrativo>0013291092</CodigoAdministrativo><NrCartao>0067335344</NrCartao> 
</ContratoEct> 
<Destinatario> 
<CnpjCpf>37323884845</CnpjCpf> 
<IeRg/><Nome>Rafael Ferreira</Nome> 
<Endereco>Al Americana</Endereco> 
<Numero>156</Numero> 
<Complemento>casa</Complemento> 
<Bairro>Jd Paulista</Bairro> 
<Cidade>Vinhedo</Cidade> 
<UF>SP</UF> 
<Cep>13280000</Cep> 
<Telefone/><TelefoneSMS/><Email/> 
</Destinatario> 
<Servico> 
<ServicoECT>41068</ServicoECT> 
</Servico> 
<NotasFiscais> 
<NotaFiscal> 
<DtNotaFiscal/><SerieNotaFiscal/><NrNotaFiscal>11223344</NrNotaFiscal><VlrTotalNota/> 
</NotaFiscal></NotasFiscais> 
<Volumes> 
<VolumeObjeto> 
<Peso>0</Peso> 
<Cubagem>117</Cubagem> 
<Altura>4</Altura> 
<Largura>11</Largura> 
<Comprimento>16</Comprimento> 
<CodigoBarraVolume>?</CodigoBarraVolume> 
<CodigoBarraCliente>?</CodigoBarraCliente> 
<ObservacaoVisual>?</ObservacaoVisual> 
<PosicaoVolume>1</PosicaoVolume> 
<Conteudo>?</Conteudo> 
<ValorDeclarado/> 
<AdicionaisVolume>?</AdicionaisVolume><VlrACobrar/> 
<Etiqueta>PZ000000822BR</Etiqueta> 
<ValorTarifa>10.96</ValorTarifa 
><ValorAdicionais>0.00</ValorAdicionais> 
<ValorPostagem>10.96</ValorPostagem> 
<StEntregaSabado>0</StEntregaSabado> 
<StEntregaDomiciliar>1</StEntregaDomiciliar> 
<DiasUteisPrazo>5</DiasUteisPrazo> 
</VolumeObjeto> 
</Volumes> 
<ListaErros/> 
<StatusPostagem>Valida</StatusPostagem> 
</Postagem>'; 

# add XML declaration to have a well-formed XML string 
$data = '<?xml version="1.0" encoding="UTF-8"?>' . $data; 

# load it as a SimpleXMLObject 
$xml_obj = simplexml_load_string($data); 

# select the desired element 
$etiqueta = $xml_obj->xpath('//Etiqueta'); 

# get the string value 
$result = (string) $etiqueta[0]; 

$result會給你 「PZ000000822BR」。

+0

得到了錯誤:請注意:試圖讓行非對象的屬性'$ etiqueta = $ xml_obj-> Volumes-> VolumeObjeto-> Etiqueta;' –

+0

我沒有,但也許你的XML看起來比不同假定輸入。我編輯了我的答案,以便使用XPath。看看它現在是否正在工作。 –