php-soap / xml
SOAP XML 包装器
1.7.0
2024-06-06 08:01 UTC
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- ext-dom: *
- veewee/xml: ^2.2 || ^3.0
Requires (Dev)
- phpunit/phpunit: ^9.5
README
此包在veewee/xml的DOM组件的基础上提供了一些工具,以简化处理SOAP XML结构。
想要帮忙?💚
想了解更多关于此项目未来的信息?查看我们将要工作的下一个大项目清单。
安装
composer require php-soap/xml
构建器
SoapHeaders
使构建soap:Header
元素的内容成为可能。
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));
注意:可以使用任何DOM构建器配置器来配置SoapHeader(s)。
定位器
BodyNamespaceLocator
定位soap:Body内部第一个元素的命名空间。
use Soap\Xml\Locator\BodyNamespaceLocator; use VeeWee\Xml\Dom\Document; $doc = Document::fromXmlString($xml); $bodyNamespace = $doc->locate(new BodyNamespaceLocator());
SoapBodyLocator
在soap:Envelope
内部定位soap:Body
元素。
use Soap\Xml\Locator\SoapBodyLocator; use VeeWee\Xml\Dom\Document; $doc = Document::fromXmlString($xml); $bodyElement = $doc->locate(new SoapBodyLocator());
SoapEnvelopeLocator
在XML中定位soap:Envelope
。
use Soap\Xml\Locator\SoapEnvelopeLocator; use VeeWee\Xml\Dom\Document; $doc = Document::fromXmlString($xml); $bodyElement = $doc->locate(new SoapEnvelopeLocator());
SoapHeaderLocator
在soap:Envelope
内部定位soap:Header
元素。
use Soap\Xml\Locator\SoapHeaderLocator; use VeeWee\Xml\Dom\Document; $doc = Document::fromXmlString($xml); $bodyElement = $doc->locate(new SoapHeaderLocator());
操作器
PrependSoapHeaders
参见SoapHeaders构建器
$doc = Document::fromXmlString($xml); $doc->manipulate(new PrependSoapHeaders($soapHeader));
XPath
EnvelopePreset
此预设允许您使用以下xpath前缀
application
:SOAP实现的命名空间。soap
:SOAP前缀允许您获取常见的元素,如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
此预设允许您使用以下xpath前缀
wsdl
:wsdl前缀允许您获取常见的元素,如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');