Chris@2: , Sebastian Heuer , Sebastian Bergmann Chris@2: * Chris@2: * For the full copyright and license information, please view the LICENSE Chris@2: * file that was distributed with this source code. Chris@2: */ Chris@2: Chris@2: namespace PharIo\Manifest; Chris@2: Chris@2: use DOMElement; Chris@2: use DOMNodeList; Chris@2: Chris@2: class ManifestElement { Chris@2: const XMLNS = 'https://phar.io/xml/manifest/1.0'; Chris@2: Chris@2: /** Chris@2: * @var DOMElement Chris@2: */ Chris@2: private $element; Chris@2: Chris@2: /** Chris@2: * ContainsElement constructor. Chris@2: * Chris@2: * @param DOMElement $element Chris@2: */ Chris@2: public function __construct(DOMElement $element) { Chris@2: $this->element = $element; Chris@2: } Chris@2: Chris@2: /** Chris@2: * @param string $name Chris@2: * Chris@2: * @return string Chris@2: * Chris@2: * @throws ManifestElementException Chris@2: */ Chris@2: protected function getAttributeValue($name) { Chris@2: if (!$this->element->hasAttribute($name)) { Chris@2: throw new ManifestElementException( Chris@2: sprintf( Chris@2: 'Attribute %s not set on element %s', Chris@2: $name, Chris@2: $this->element->localName Chris@2: ) Chris@2: ); Chris@2: } Chris@2: Chris@2: return $this->element->getAttribute($name); Chris@2: } Chris@2: Chris@2: /** Chris@2: * @param $elementName Chris@2: * Chris@2: * @return DOMElement Chris@2: * Chris@2: * @throws ManifestElementException Chris@2: */ Chris@2: protected function getChildByName($elementName) { Chris@2: $element = $this->element->getElementsByTagNameNS(self::XMLNS, $elementName)->item(0); Chris@2: Chris@2: if (!$element instanceof DOMElement) { Chris@2: throw new ManifestElementException( Chris@2: sprintf('Element %s missing', $elementName) Chris@2: ); Chris@2: } Chris@2: Chris@2: return $element; Chris@2: } Chris@2: Chris@2: /** Chris@2: * @param $elementName Chris@2: * Chris@2: * @return DOMNodeList Chris@2: * Chris@2: * @throws ManifestElementException Chris@2: */ Chris@2: protected function getChildrenByName($elementName) { Chris@2: $elementList = $this->element->getElementsByTagNameNS(self::XMLNS, $elementName); Chris@2: Chris@2: if ($elementList->length === 0) { Chris@2: throw new ManifestElementException( Chris@2: sprintf('Element(s) %s missing', $elementName) Chris@2: ); Chris@2: } Chris@2: Chris@2: return $elementList; Chris@2: } Chris@2: Chris@2: /** Chris@2: * @param string $elementName Chris@2: * Chris@2: * @return bool Chris@2: */ Chris@2: protected function hasChild($elementName) { Chris@2: return $this->element->getElementsByTagNameNS(self::XMLNS, $elementName)->length !== 0; Chris@2: } Chris@2: }