php-soap / xml
XML wrappers for SOAP
Fund package maintenance!
Open Collective
Installs: 1 503 620
Dependents: 8
Suggesters: 0
Security: 0
Stars: 10
Watchers: 3
Forks: 1
Open Issues: 0
Requires
- php: ~8.2.0 || ~8.3.0 || ~8.4.0
- ext-dom: *
- veewee/xml: ^3.0
Requires (Dev)
- phpunit/phpunit: ^10.0
README
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 to help out? 💚
Want more information about the future of this project? Check out this list of the next big projects we'll be working on.
Installation
composer require php-soap/xml
Builder
SoapHeaders
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.
Locator
BodyNamespaceLocator
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());
SoapBodyLocator
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());
SoapEnvelopeLocator
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());
SoapHeaderLocator
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());
Manipulator
PrependSoapHeaders
See SoapHeaders builder:
$doc = Document::fromXmlString($xml); $doc->manipulate(new PrependSoapHeaders($soapHeader));
XPath
EnvelopePreset
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');
WsdlPreset
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');