mirror of
https://github.com/php/php-src.git
synced 2026-04-30 03:33:17 +02:00
d46dc5694c
There are two linked issues: - Conflicts couldn't be resolved by changing the prefix name. - Lacking a prefix would shift the namespace as the default namespace, causing elements to suddenly become part of the namespace instead of the attributes. The output could still be improved by removing redundant namespace declarations, but that's another issue. At least the output is correct now. Closes GH-11777.
66 lines
2.5 KiB
PHP
66 lines
2.5 KiB
PHP
--TEST--
|
|
DOMDocument::importNode() with attribute prefix name conflict
|
|
--EXTENSIONS--
|
|
dom
|
|
--FILE--
|
|
<?php
|
|
|
|
echo "--- Non-default namespace test case without a default namespace in the destination ---\n";
|
|
|
|
$dom1 = new DOMDocument();
|
|
$dom2 = new DOMDocument();
|
|
$dom1->loadXML('<?xml version="1.0"?><container xmlns:foo="http://php.net" foo:bar="yes"/>');
|
|
$dom2->loadXML('<?xml version="1.0"?><container xmlns:foo="http://php.net/2"/>');
|
|
$attribute = $dom1->documentElement->getAttributeNode('foo:bar');
|
|
$imported = $dom2->importNode($attribute);
|
|
$dom2->documentElement->setAttributeNodeNS($imported);
|
|
|
|
echo $dom1->saveXML();
|
|
echo $dom2->saveXML();
|
|
|
|
echo "--- Non-default namespace test case with a default namespace in the destination ---\n";
|
|
|
|
$dom1 = new DOMDocument();
|
|
$dom2 = new DOMDocument();
|
|
$dom1->loadXML('<?xml version="1.0"?><container xmlns:foo="http://php.net" foo:bar="yes"/>');
|
|
$dom2->loadXML('<?xml version="1.0"?><container xmlns="http://php.net" xmlns:foo="http://php.net/2"/>');
|
|
$attribute = $dom1->documentElement->getAttributeNode('foo:bar');
|
|
$imported = $dom2->importNode($attribute);
|
|
$dom2->documentElement->setAttributeNodeNS($imported);
|
|
|
|
echo $dom1->saveXML();
|
|
echo $dom2->saveXML();
|
|
|
|
echo "--- Default namespace test case ---\n";
|
|
|
|
// We don't expect the namespace to be imported because default namespaces on the same element don't apply to attributes
|
|
// but the attribute should be imported
|
|
$dom1 = new DOMDocument();
|
|
$dom2 = new DOMDocument();
|
|
$dom1->loadXML('<?xml version="1.0"?><container xmlns="http://php.net" bar="yes"/>');
|
|
$dom2->loadXML('<?xml version="1.0"?><container xmlns="http://php.net/2"/>');
|
|
$attribute = $dom1->documentElement->getAttributeNode('bar');
|
|
$imported = $dom2->importNode($attribute);
|
|
$dom2->documentElement->setAttributeNodeNS($imported);
|
|
|
|
echo $dom1->saveXML();
|
|
echo $dom2->saveXML();
|
|
|
|
?>
|
|
--EXPECT--
|
|
--- Non-default namespace test case without a default namespace in the destination ---
|
|
<?xml version="1.0"?>
|
|
<container xmlns:foo="http://php.net" foo:bar="yes"/>
|
|
<?xml version="1.0"?>
|
|
<container xmlns:foo="http://php.net/2" xmlns:default="http://php.net" default:bar="yes"/>
|
|
--- Non-default namespace test case with a default namespace in the destination ---
|
|
<?xml version="1.0"?>
|
|
<container xmlns:foo="http://php.net" foo:bar="yes"/>
|
|
<?xml version="1.0"?>
|
|
<container xmlns="http://php.net" xmlns:foo="http://php.net/2" xmlns:default="http://php.net" default:bar="yes"/>
|
|
--- Default namespace test case ---
|
|
<?xml version="1.0"?>
|
|
<container xmlns="http://php.net" bar="yes"/>
|
|
<?xml version="1.0"?>
|
|
<container xmlns="http://php.net/2" bar="yes"/>
|