使用XMLViews时向rootNode添加属性

时间:2016-05-18 15:06:55

标签: xml cakephp cakephp-3.0 xml-attribute

我正在寻找一种在CakePHP3中使用XMLViews时为根节点添加属性的方法。脚本生成一个简单的sitemap.xml,需要urlset标记中包含的命名空间。没有太多的代码要展示,但无论如何:

function sitemap($language='en') {
    [..]
    $_rootNode = 'urlset';
    $this->set(compact('url'));
    $this->set('_rootNode', $_rootNode);
    $this->set('_serialize', ['url']);
}

我知道,我可以为XML添加真正的视图,但我更喜欢这样做

1 个答案:

答案 0 :(得分:3)

通常可以使用@前缀定义属性。如果是通用名称空间,您还可以使用xmlns:密钥。

为了将它们添加到根音符中,您必须将它们设置为与url变量处于同一级别的视图/序列化变量,例如

$attributes = [
    'xmlns:' => 'http://www.sitemaps.org/schemas/sitemap/0.9', // or
    // '@xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
    // ...
];
$this->set($attributes + compact('url'));
$this->set('_rootNode', $_rootNode);
$this->set('_serialize', array_merge(array_keys($attributes), ['url']));

这样您最终得到的数据集看起来像

[
    'xmlns:' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
    // ...
    'url' => [
        // ...
    ]
]

和类似

的序列集
['xmlns:' /*, ... */, 'url']

另见