1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
--TEST--
Bug #79701 (getElementById does not correctly work with duplicate definitions) - set attribute in xml variation
--EXTENSIONS--
dom
--FILE--
<?php
function test($dom, $fn) {
$test1 = $dom->getElementById('x');
$test2 = $dom->getElementById('y');
echo "--- After resetting test1's id ---\n";
$fn($test1, 'xml:id', 'y');
var_dump($dom->getElementById('x')?->nodeName);
var_dump($dom->getElementById('y')?->nodeName);
echo "--- After resetting test2's id ---\n";
$fn($test2, 'xml:id', 'x');
var_dump($dom->getElementById('x')?->nodeName);
var_dump($dom->getElementById('y')?->nodeName);
echo "--- After resetting test1's id ---\n";
$fn($test1, 'xml:id', 'z');
var_dump($dom->getElementById('x')?->nodeName);
var_dump($dom->getElementById('y')?->nodeName);
echo "--- After resetting test2's id ---\n";
$fn($test2, 'xml:id', 'z');
var_dump($dom->getElementById('x')?->nodeName);
var_dump($dom->getElementById('y')?->nodeName);
echo "--- Get id z ---\n";
var_dump($dom->getElementById('z')?->nodeName);
}
function getNamespace($name) {
if (str_contains($name, 'xml:')) {
return 'http://www.w3.org/XML/1998/namespace';
}
return '';
}
$common_xml = <<<XML
<root>
<test1 xml:id="x"/>
<test2 xml:id="y"/>
</root>
XML;
echo "\n=== DOMDocument: setAttribute ===\n\n";
$dom = new DOMDocument;
$dom->loadXML($common_xml);
test($dom, fn ($element, $name, $value) => $element->setAttribute($name, $value));
echo "\n=== DOMDocument: setAttributeNS ===\n\n";
$dom = new DOMDocument;
$dom->loadXML($common_xml);
test($dom, fn ($element, $name, $value) => $element->setAttributeNS(getNamespace($name), $name, $value));
echo "\n=== Dom\\XMLDocument: setAttribute ===\n\n";
$dom = Dom\XMLDocument::createFromString($common_xml);
test($dom, fn ($element, $name, $value) => $element->setAttribute($name, $value));
echo "\n=== Dom\\XMLDocument: setAttributeNS ===\n\n";
$dom = Dom\XMLDocument::createFromString($common_xml);
test($dom, fn ($element, $name, $value) => $element->setAttributeNS(getNamespace($name), $name, $value));
?>
--EXPECT--
=== DOMDocument: setAttribute ===
--- After resetting test1's id ---
NULL
string(5) "test1"
--- After resetting test2's id ---
string(5) "test2"
string(5) "test1"
--- After resetting test1's id ---
string(5) "test2"
NULL
--- After resetting test2's id ---
NULL
NULL
--- Get id z ---
string(5) "test1"
=== DOMDocument: setAttributeNS ===
--- After resetting test1's id ---
NULL
string(5) "test1"
--- After resetting test2's id ---
string(5) "test2"
string(5) "test1"
--- After resetting test1's id ---
string(5) "test2"
NULL
--- After resetting test2's id ---
NULL
NULL
--- Get id z ---
string(5) "test1"
=== Dom\XMLDocument: setAttribute ===
--- After resetting test1's id ---
NULL
string(5) "test1"
--- After resetting test2's id ---
string(5) "test2"
string(5) "test1"
--- After resetting test1's id ---
string(5) "test2"
NULL
--- After resetting test2's id ---
NULL
NULL
--- Get id z ---
string(5) "test1"
=== Dom\XMLDocument: setAttributeNS ===
--- After resetting test1's id ---
NULL
string(5) "test1"
--- After resetting test2's id ---
string(5) "test2"
string(5) "test1"
--- After resetting test1's id ---
string(5) "test2"
NULL
--- After resetting test2's id ---
NULL
NULL
--- Get id z ---
string(5) "test1"
|