SOAP XML 包装器

维护者

详细信息

github.com/php-soap/xml

源代码

问题

资助包维护!
Open Collective

1.7.0 2024-06-06 08:01 UTC

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');