diff --git a/lib/Cake/Test/Case/View/Helper/RssHelperTest.php b/lib/Cake/Test/Case/View/Helper/RssHelperTest.php index bfffdf4fcf1..1e69da06685 100644 --- a/lib/Cake/Test/Case/View/Helper/RssHelperTest.php +++ b/lib/Cake/Test/Case/View/Helper/RssHelperTest.php @@ -717,4 +717,56 @@ public function testElementAttrNotInParent() { $this->assertTags($result, $expected); } + public function testElementNamespaceWithoutPrefix() { + $item = array( + 'creator' => 'Alex', + ); + $attributes = array( + 'namespace' => 'http://link.com' + ); + $result = $this->Rss->item($attributes, $item); + $expected = array( + 'item' => array( + 'xmlns' => 'http://link.com' + ), + 'creator' => array( + 'xmlns' => 'http://link.com' + ), + 'Alex', + '/creator', + '/item' + ); + $this->assertTags($result, $expected, true); + } + + public function testElementNamespaceWithPrefix() { + $item = array( + 'title' => 'Title', + 'creator' => 'Alex' + ); + $attributes = array( + 'namespace' => array( + 'prefix' => 'dc', + 'url' => 'http://link.com' + ) + ); + $result = $this->Rss->item($attributes, $item); + $expected = array( + 'item' => array( + 'xmlns:dc' => 'http://link.com' + ), + 'title' => array( + 'xmlns:dc' => 'http://link.com' + ), + 'Title', + '/title', + 'creator' => array( + 'xmlns:dc' => 'http://link.com' + ), + 'Alex', + '/creator', + '/item' + ); + $this->assertTags($result, $expected, true); + } } diff --git a/lib/Cake/View/Helper/RssHelper.php b/lib/Cake/View/Helper/RssHelper.php index bd412848f8b..26160f05546 100644 --- a/lib/Cake/View/Helper/RssHelper.php +++ b/lib/Cake/View/Helper/RssHelper.php @@ -256,6 +256,8 @@ public function item($att = array(), $elements = array()) { $attrib = $val; $val = null; break; + default: + $attrib = $att; } if (!is_null($val) && $escape) { $val = h($val); @@ -312,7 +314,12 @@ public function elem($name, $attrib = array(), $content = null, $endTag = true) $xml = '<' . $name; if (!empty($namespace)) { - $xml .= ' xmlns:"' . $namespace . '"'; + $xml .= ' xmlns'; + if (is_array($namespace)) { + $xml .= ':' . $namespace['prefix']; + $namespace = $namespace['url']; + } + $xml .= '="' . $namespace . '"'; } $bareName = $name; if (strpos($name, ':') !== false) { @@ -329,8 +336,10 @@ public function elem($name, $attrib = array(), $content = null, $endTag = true) $xml .= '>' . $content . ''; $elem = Xml::build($xml, array('return' => 'domdocument')); $nodes = $elem->getElementsByTagName($bareName); - foreach ($attrib as $key => $value) { - $nodes->item(0)->setAttribute($key, $value); + if ($attrib) { + foreach ($attrib as $key => $value) { + $nodes->item(0)->setAttribute($key, $value); + } } foreach ($children as $k => $child) { $child = $elem->createElement($name, $child);