diff --git a/lib/DOM/Element.php b/lib/DOM/Element.php index e2d32f4..300c703 100644 --- a/lib/DOM/Element.php +++ b/lib/DOM/Element.php @@ -15,10 +15,15 @@ class Element extends \DOMElement { // Newer versions of the DOM spec have getAttribute return an empty string only // when the attribute exists and is empty, otherwise null. This fixes that. $value = parent::getAttribute($name); - if ($value === '' && !$this->hasAttribute($name)) { + if ($value === '' && !parent::hasAttribute($name)) { + // the PHP DOM does not acknowledge the presence of XMLNS-namespace attributes + foreach ($this->attributes as $a) { + if ($a->nodeName === $name) { + return $a->value; + } + } return null; } - return $value; } @@ -29,7 +34,6 @@ class Element extends \DOMElement { if ($value === '' && !$this->hasAttributeNS($namespaceURI, $localName)) { return null; } - return $value; } diff --git a/tests/cases/TestDOM.php b/tests/cases/TestDOM.php index a7027b9..d343dc9 100644 --- a/tests/cases/TestDOM.php +++ b/tests/cases/TestDOM.php @@ -288,20 +288,20 @@ class TestDOM extends \PHPUnit\Framework\TestCase { $this->assertTrue($e->hasAttributeNS(Parser::XMLNS_NAMESPACE, "xlink")); $this->assertTrue($e->hasAttributeNS("fake_ns", "eek")); // perform retrival tests - //$this->assertNull($e->getAttribute("blah")); - //$this->assertNull($e->getAttribute("OOK")); - //$this->assertNull($e->getAttribute("eek")); - //$this->assertNull($e->getAttribute("ack")); - //$this->assertSame("eek", $e->getAttribute("ook")); - //$this->assertSame("http://example.com/", $e->getAttribute("xml:base")); - //$this->assertSame(Parser::XLINK_NAMESPACE, $e->getAttribute("xmlns:xlink")); - //$this->assertSame("ack", $e->getAttribute("ook:eek")); - //$this->assertNull($e->getAttributeNS(null, "blah")); - //$this->assertNull($e->getAttributeNS(null, "OOK")); - //$this->assertNull($e->getAttributeNS(null, "ack")); - //$this->assertSame("eek", $e->getAttributeNS(null, "ook")); - //$this->assertSame("http://example.com/", $e->getAttributeNS(Parser::XML_NAMESPACE, "base")); - //$this->assertSame(Parser::XLINK_NAMESPACE, $e->getAttributeNS(Parser::XMLNS_NAMESPACE, "xlink")); - //$this->assertSame("ack", $e->getAttributeNS("fake_ns", "eek")); + $this->assertNull($e->getAttribute("blah")); + $this->assertNull($e->getAttribute("OOK")); + $this->assertNull($e->getAttribute("eek")); + $this->assertNull($e->getAttribute("ack")); + $this->assertSame("eek", $e->getAttribute("ook")); + $this->assertSame("http://example.com/", $e->getAttribute("xml:base")); + $this->assertSame(Parser::XLINK_NAMESPACE, $e->getAttribute("xmlns:xlink")); + $this->assertSame("ack", $e->getAttribute("ook:eek")); + $this->assertNull($e->getAttributeNS(null, "blah")); + $this->assertNull($e->getAttributeNS(null, "OOK")); + $this->assertNull($e->getAttributeNS(null, "ack")); + $this->assertSame("eek", $e->getAttributeNS(null, "ook")); + $this->assertSame("http://example.com/", $e->getAttributeNS(Parser::XML_NAMESPACE, "base")); + $this->assertSame(Parser::XLINK_NAMESPACE, $e->getAttributeNS(Parser::XMLNS_NAMESPACE, "xlink")); + $this->assertSame("ack", $e->getAttributeNS("fake_ns", "eek")); } }