This package provides some tools on top of veewee/xml's DOM component in order to make it easier to deal with SOAP XML structures.
Want more information about the future of this project? Check out this list of the next big projects we'll be working on.
composer require php-soap/xml
Makes it possible to build the content of a soap:Header
element.
use Soap\Xml\Builder\SoapHeaders;
use Soap\Xml\Builder\SoapHeader;
use Soap\Xml\Builder\Header\Actor;
use Soap\Xml\Builder\Header\MustUnderstand;
use Soap\Xml\Manipulator\PrependSoapHeaders;
use VeeWee\Xml\Dom\Document;
use function VeeWee\Xml\Dom\Builder\namespaced_element;
use function VeeWee\Xml\Dom\Builder\element;
use function VeeWee\Xml\Dom\Builder\value;
$doc = Document::fromXmlString($xml);
$builder = new SoapHeaders(
new SoapHeader(
$targetNamespace,
'Auth',
children(
namespaced_element($targetNamespace, 'user', value('josbos')),
namespaced_element($targetNamespace, 'password', value('topsecret'))
),
// Optionally, you can provide additional configurators for setting
// SOAP-ENV specific attributes:
Actor::next(),
new MustUnderstand()
),
$header2,
$header3
);
$headers = $doc->build($builder);
// You can prepend the soap:Header as first element of the soap:envelope
// Like this
$doc->manipulate(new PrependSoapHeaders(...$headers));
Note: The SoapHeader(s) can be configured by using any DOM builder configurator.
Locates the namespace of the first element inside the soap:Body.
use Soap\Xml\Locator\BodyNamespaceLocator;
use VeeWee\Xml\Dom\Document;
$doc = Document::fromXmlString($xml);
$bodyNamespace = $doc->locate(new BodyNamespaceLocator());
Locates the soap:Body
element inside a soap:Envelope
use Soap\Xml\Locator\SoapBodyLocator;
use VeeWee\Xml\Dom\Document;
$doc = Document::fromXmlString($xml);
$bodyElement = $doc->locate(new SoapBodyLocator());
Locates the soap:Envelope
inside XML.
use Soap\Xml\Locator\SoapEnvelopeLocator;
use VeeWee\Xml\Dom\Document;
$doc = Document::fromXmlString($xml);
$bodyElement = $doc->locate(new SoapEnvelopeLocator());
Locates the soap:Header
element inside a soap:Envelope
use Soap\Xml\Locator\SoapHeaderLocator;
use VeeWee\Xml\Dom\Document;
$doc = Document::fromXmlString($xml);
$bodyElement = $doc->locate(new SoapHeaderLocator());
See SoapHeaders builder:
$doc = Document::fromXmlString($xml);
$doc->manipulate(new PrependSoapHeaders($soapHeader));
This preset allows you to use following xpath prefixes:
application
: The namespace of the SOAP implementation.soap
: The soap prefix allows you to fetch common elements like Body, header, Envelope, ...
use Soap\Xml\Xpath\EnvelopePreset;
use VeeWee\Xml\Dom\Document;
$doc = Document::fromXmlString($xml);
$xpath = $doc->xpath(new EnvelopePreset($doc));
$xpath->querySingle('/soap:Envelope');
$xpath->querySingle('//soap:Body');
$xpath->querySingle('//soap:Header');
$xpath->querySingle('//soap:Body//application:Foo');
This preset allows you to use following xpath prefixes:
wsdl
: The wsdl prefix allows you to fetch common elements like definitions, types, services, operations, ...
use Soap\Xml\Xpath\WsdlPreset;
use VeeWee\Xml\Dom\Document;
$doc = Document::fromXmlString($xml);
$xpath = $doc->xpath(new WsdlPreset($doc));
$xpath->querySingle('/wsdl:definitions');
$xpath->querySingle('//wsdl:types');
$xpath->querySingle('//wsdl:services');