如何使用PHP

时间:2015-12-04 19:53:53

标签: php xml

我正在尝试使用PHP SimpleXMLElement生成RSS提要,问题是我需要为元素添加前缀,但无法使用SimpleXMLElement类找到这样做的方法。

我尝试过使用$item->addChild('prefix:element', 'value'),但在结果xml中它会删除前缀,知道为什么会发生这种情况吗?

我想知道是否有办法使用SimpleXMLElement或任何其他更清洁方式解决此问题,而不仅仅是回显 XML。

为了澄清,这是我的PHP代码:

    $xml = new SimpleXMLElement('<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0"/>');
    $channel = $xml->addChild('channel');
    $channel->addChild('title', 'Text');
    $channel->addChild('link', 'http://example.com');
    $channel->addChild('description', 'An example item from the feed.');

    foreach($this->products as $product) {
        $item = $channel->addChild('item');

        foreach($product as $key => $value)
            $item->addChild($key, $value);
    }

    return $xml->asXML();

这是我正在尝试生成的示例XML:

<?xml version="1.0"?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<channel>
    <title>Test Store</title>
    <link>http://www.example.com</link>
    <description>An example item from the feed</description>

    <item>
        <g:id>DB_1</g:id>
        <g:title>Dog Bowl In Blue</g:title>
        <g:description>Solid plastic Dog Bowl in marine blue color</g:description>
        ...
    </item>
...

提前致谢

1 个答案:

答案 0 :(得分:2)

您需要传递前缀的名称空间uri,以添加前缀为

的子元素
$item->addChild($key, $value, 'http://base.google.com/ns/1.0');

eval.in demo

$xml = new SimpleXMLElement('<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0"/>');
$channel = $xml->addChild('channel');
$channel->addChild('title', 'Text');
$channel->addChild('link', 'http://example.com');
$channel->addChild('description', 'An example item from the feed.');

$item = $channel->addChild('item');
$item->addChild('g:foo', 'bar', 'http://base.google.com/ns/1.0');

print $xml->asXML();