PHP&XML...

1. PHP&XML...

Anilton Fernandes
aniltonf

(usa Ubuntu)

Enviado em 15/12/2014 - 11:05h

Ola... preciso de uma ajuda aqui..

Eu tenho um codigo que vai buscar uma string XML, mas preciso depois dos valores individuais para manipulacao... Ja vi varios documentos e dicas, mas nao me ajudam com aquelas funcoes e classes tipo xml2array, etc. nnehum funcionou...

Entao estou fazendo isso usando simpleXMLElement, mas nao consigo chegar aos valores, porque nao consiguo entrar no TAG <env:Body>...

O Codigo

<?php
// string XML recebido

$xmlString =
'<?xml version="1.0"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Body>
<getModuleListResponse xmlns="http://www.appeartv.com/automation/v1">
<code>100</code>
<message>OK</message>
<moduleList>
<moduleListEntry>
<slotId>1</slotId>
<modules>
<module>A</module>
</modules>
<moduleType>asi</moduleType>
<cardId>32</cardId>
<direction>input</direction>
<hardwareVersion>1.0</hardwareVersion>
<numPorts>3</numPorts>
<swVer>1.06.3000</swVer>
<bootVer>1.0.1784</bootVer>
<serial>62600124</serial>
<cardWidth>2</cardWidth>
<present>1</present>
<ddmOptions>
<ciOption>1</ciOption>
<rfOption>1</rfOption>
<hpOption>0</hpOption>
<stereoOption>none</stereoOption>
</ddmOptions>
</moduleListEntry>
</moduleList>
</getModuleListResponse>
</env:Body>
</env:Envelope>';

// nao e possivel executar o str_replace, para eliminar a tag indesejada...
//$sxe = str_replace("<env:Body>", "", $sxe);
//$sxe = str_replace("</env:Body>", "", $sxe);

// se for eliminado <env:Body> os campos funcionam, se nao, diz que...
// Notice: Trying to get property of non-object in /var/www/html/cvt/teste2.php on line 86

echo $sxe->getModuleListResponse->code;

?>


Ajuda por favor...


  


2. Correcao...

Anilton Fernandes
aniltonf

(usa Ubuntu)

Enviado em 15/12/2014 - 11:10h

Falta esta linha no codigo...

$sxe = new SimpleXMLElement($xmlString);

que vem depois do codigo XML




3. Re: PHP&XML...

Roberto Felix Correia
felixcorreia

(usa Debian)

Enviado em 15/12/2014 - 14:56h

Acho que você está tentando substituir na variável errada:

$xmlString =
'<?xml version="1.0"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Body>
<getModuleListResponse xmlns="http://www.appeartv.com/automation/v1">
<code>100</code>
<message>OK</message>
<moduleList>
<moduleListEntry>
<slotId>1</slotId>
<modules>
<module>A</module>
</modules>
<moduleType>asi</moduleType>
<cardId>32</cardId>
<direction>input</direction>
<hardwareVersion>1.0</hardwareVersion>
<numPorts>3</numPorts>
<swVer>1.06.3000</swVer>
<bootVer>1.0.1784</bootVer>
<serial>62600124</serial>
<cardWidth>2</cardWidth>
<present>1</present>
<ddmOptions>
<ciOption>1</ciOption>
<rfOption>1</rfOption>
<hpOption>0</hpOption>
<stereoOption>none</stereoOption>
</ddmOptions>
</moduleListEntry>
</moduleList>
</getModuleListResponse>
</env:Body>
</env:Envelope>';

// nao e possivel executar o str_replace, para eliminar a tag indesejada...
//$sxe = str_replace("<env:Body>", "", $sxe);

Pelo que eu entendi, você colocou o xml numa variável chamada $xmlString e no str_replace você tenta mudar outra variável. Eu acho que o certo é assim:

$sxe = str_replace("<env:Body>", "", $xmlString);
$sxe = str_replace("</env:Body>", "", $sxe);

Vê se resolve...



4. RESOLVIDO

Anilton Fernandes
aniltonf

(usa Ubuntu)

Enviado em 15/12/2014 - 16:02h

Obrigado Mr.

Não era bem isso, mas ajudou-me a encontrar o problema...

Depois de ver a tua mensagem, me apercebi que devia editar a string com str_replace antes de usar SimpleXMLElement...

A solucao ficou assim...


<CODE>
<?php
// string XML recebido

$xmlString =
'<?xml version="1.0"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Body>
<getModuleListResponse xmlns="http://www.appeartv.com/automation/v1">
<code>100</code>
<message>OK</message>
<moduleList>
<moduleListEntry>
<slotId>1</slotId>
<modules>
<module>A</module>
</modules>
<moduleType>asi</moduleType>
<cardId>32</cardId>
<direction>input</direction>
<hardwareVersion>1.0</hardwareVersion>
<numPorts>3</numPorts>
<swVer>1.06.3000</swVer>
<bootVer>1.0.1784</bootVer>
<serial>62600124</serial>
<cardWidth>2</cardWidth>
<present>1</present>
<ddmOptions>
<ciOption>1</ciOption>
<rfOption>1</rfOption>
<hpOption>0</hpOption>
<stereoOption>none</stereoOption>
</ddmOptions>
</moduleListEntry>
</moduleList>
</getModuleListResponse>
</env:Body>
</env:Envelope>';

// nao e possivel executar o str_replace, para eliminar a tag indesejada...
$xmlString = str_replace("<env:Body>", "", $xmlString);
$xmlString = str_replace("</env:Body>", "", $xmlString);

$sxe = new SimpleXMLElement($xmlString);

echo "CODE: " . $sxe->getModuleListResponse->code;
echo "<br>SERIAL: " . $sxe->getModuleListResponse->moduleList->moduleListEntry->serial;

?>

</code>

Obrigado mais uma vez... ;)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts