Viewing file: XPath.php (1.61 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php namespace enshrined\svgSanitize\data;
class XPath extends \DOMXPath { const DEFAULT_NAMESPACE_PREFIX = 'svg';
/** * @var string */ protected $defaultNamespaceURI;
public function __construct(\DOMDocument $doc) { parent::__construct($doc); $this->handleDefaultNamespace(); }
/** * @param string $nodeName * @return string */ public function createNodeName($nodeName) { if (empty($this->defaultNamespaceURI)) { return $nodeName; } return self::DEFAULT_NAMESPACE_PREFIX . ':' . $nodeName; }
protected function handleDefaultNamespace() { $rootElements = $this->getRootElements();
if (count($rootElements) !== 1) { throw new \LogicException( sprintf('Got %d svg elements, expected exactly one', count($rootElements)), 1570870568 ); } $this->defaultNamespaceURI = (string)$rootElements[0]->namespaceURI;
if ($this->defaultNamespaceURI !== '') { $this->registerNamespace(self::DEFAULT_NAMESPACE_PREFIX, $this->defaultNamespaceURI); } }
/** * @return \DOMElement[] */ protected function getRootElements() { $rootElements = []; $elements = $this->document->getElementsByTagName('svg'); /** @var \DOMElement $element */ foreach ($elements as $element) { if ($element->parentNode !== $this->document) { continue; } $rootElements[] = $element; } return $rootElements; } }
|