php - How to parse SOAP in order to list all Request and Object names -
i'm able parse xml soap when know namespace , request name.
because have different kind of soap requests, request name in soap file . extract of part of soap:
<?xml version="1.0" encoding="utf-8"?> <soap-env:envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://schema.example.com" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" soap-env:encodingstyle="http://schemas.xmlsoap.org/soap/encoding/" > <soap-env:body> **<ns1:sendmailling>** <campagne xsi:type="ns1:campaign"><activatededup xsi:nil="true"/><billingcode xsi:nil="true"/><deliveryfax xsi:type="ns1:deliveryfax"/> <deliverymail xsi:type="ns1:deliverymail"> ...
php code:
if(is_file($file)) { $content=file_get_contents($file); $xml = simplexml_load_string($content); $xml->registerxpathnamespace('ns1', 'http://schema.example.com'); foreach ($xml->xpath('\\soap-env:') $item) { //certainly bad way? echo "<pre>"; print_r($item); echo "</pre>"; } echo "<pre>"; print_r($xml); echo "</pre>"; }
i no result... make appears : 'sendmailling' (identify request name)
when specify
//foreach($xml->xpath('//ns1:sendmailling') $item)
there no problems.
i tried foreach($xml->xpath('//ns1') $item)
, $xml->xpath('//soap-enc'), $xml->xpath('//body')
but...
i had problems understand questions not answer.
if understand right, want select element nodes direct children of <soap-env:body>
, in ns1
/ http://schema.example.com
namespace.
you have registered namespace prefix used simplexmlelement::xpath
:
$xml->registerxpathnamespace('ns1', 'http://schema.example.com');
you have not yet registered soap-env
/ http://schemas.xmlsoap.org/soap/envelope/
namespace far can see.
in xpath match element can specify it's namespace. there multiple ways how done:
* elements in namespace. prefix:* elements in namespace "prefix" (registered prefix) prefix:local "local" elements in namespace "prefix"
for example select elements ns1
prefix:
//ns1:*
you might want limit because want direct children withn <soap-env:body>
register namespace soap-env
prefix , extend previous xpath:
/soap-env:body/ns1:*
this should have elements you're looking for.
(op:) again, when
foreach ($xml->xpath('//soap-env:body/ns1:*') $item) { echo $item->getname() . "<br>"; }
all ok request name 'sendmailling'
.
Comments
Post a Comment