*/ private $extraNamespaces; /** * CapsuleSigner constructor. * * If $extraNamespaces is null then it will use default extra namespaces, * but if it is defined it will only use what is defined on parameter * * @param array|null $extraNamespaces */ public function __construct(array $extraNamespaces = null) { if (null === $extraNamespaces) { $extraNamespaces = static::defaultExtraNamespaces(); } $this->extraNamespaces = $extraNamespaces; } /** @return array */ public function extraNamespaces(): array { return $this->extraNamespaces; } /** @return array */ public static function defaultExtraNamespaces(): array { return [ 'xsd' => 'http://www.w3.org/2001/XMLSchema', 'xsi' => 'http://www.w3.org/2001/XMLSchema-instance', ]; } public function createBaseDocument(string $tagName, string $namespace): DOMDocument { $document = new DOMDocument('1.0', 'UTF-8'); $document->preserveWhiteSpace = self::XMLDOC_NO_PRESERVE_WHITESPACE; $document->formatOutput = self::XMLDOC_NO_FORMAT_OUTPUT; $cancelacion = $document->createElementNS($namespace, $tagName); foreach ($this->extraNamespaces() as $prefix => $uri) { $cancelacion->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:' . $prefix, $uri); } $document->appendChild($cancelacion); return $document; } }