使用命名空间信息解析XML

时间:2014-06-12 13:46:34

标签: php xml xml-parsing simplexml xml-namespaces

我找到了很多这个问题的解决方案,但我的代码不起作用!

XML信息:

<?xml version="1.0" encoding="UTF-8"?>
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
        <S:Body>
            <ns2:resultado xmlns:ns2="http://webservice.consulta.spcjava.spcbrasil.org/" data="2014-06-03T11:37:32.001-03:00" restricao="false">
             <protocolo digito="2" numero="1204248496" />
             .... other XML info

我的代码:

$s = '<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:resultado xmlns:ns2="http://webservice.consulta.spcjava.spcbrasil.org/" data="2014-06-03T11:37:32.001-03:00" restricao="false"><protocolo digito="2" numero="1204248496" /> ...

$xml = simplexml_load_string($s);

$x2 = $xml->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children('http://webservice.consulta.spcjava.spcbrasil.org/')->resultado->protocolo->digito;

print_r($x2);
var_dump(count($x2));

返回null和0表示对象计数。

我一直在关注本教程:http://amigotechnotes.wordpress.com/2013/11/16/parse-xml-with-namespace-by-simplexml-in-php/

我不知道我的例子与他的例子不同。 :/

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

最后使用其他语法使其工作。

$xml = simplexml_load_string($resultadoDocumento[0]["cdo_xml"]);
$resultadoSPC = $xml->children('S', TRUE)->Body->children('ns2', TRUE)->children();

通过以下方式访问节点:

<?php foreach ($resultadoSPC->consumidor->children()->{"consumidor-pessoa-fisica"} as $consumidorElement) : ?>
<?php echo $consumidorElement->attributes()->{"nome"}; ?>