Browse Source

Fix getAttribute()

split-manual
J. King 3 years ago
parent
commit
83653f3769
  1. 10
      lib/DOM/Element.php
  2. 30
      tests/cases/TestDOM.php

10
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;
}

30
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"));
}
}

Loading…
Cancel
Save