太气人了,我几乎说不出话来。我已经用 SimpleXML 组装了一个 RSS 提要,但它正在使用 namespace ,现在就是这样。但是,它在输出时不断尝试在根节点中声明 xmlns:xmlns=""。即使我不这样做。
它始于
$rssXML->addAttribute("version", '2.0');
$rssXML->addAttribute("xmlns:media", "http://search.yahoo.com/mrss/", '');
$rssXML->addAttribute("xmlns:dcterms", "http://purl.org/dc/terms/", '');
在这之后我做:-
header("Content-Type: application/rss+xml");
echo $syndicationXML->asXML();
然而它输出:-
<?xml version="1.0"?>
<rss xmlns:xmlns="" version="2.0" xmlns:media="http://search.yahoo.com/mrss/" xmlns:dcterms="http://purl.org/dc/terms/"><channel>...
我不明白所有这些命名空间声明。这是怎么回事?
最佳答案
SimpleXML 的问题在于它的 addAttribute
函数添加了一个属性,而不是一个命名空间,虽然它看起来像你想要的那样,但它并不意味着你使用它的方式。
它的目的是添加一个属于特定命名空间(指定为第三个参数)的值,而不是添加命名空间本身。您最终使用 xmlns:xmlns
的原因是因为 SimpleXML 发现您在指定名称 xmlns
时使用了 xmlns:media
命名空间,因此它创建了一个空的 xmlns:xmlns
。
以下是您问题的 2 个解决方案:
1. 在构造函数的命名空间中指定。
$rssXML = new SimpleXMLElement('<rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:dcterms="http://purl.org/dc/terms/" />');
$rssXML->addAttribute('version', '2.0');
2. 使用
xmlns:xmlns=""
替换 preg_replace
echo preg_replace('/xmlns:xmlns=""\s?/', '', $rssXML->asXML());
关于php - SimpleXML 声明了 xmlns :xmlns ="" - no way to remove,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6627111/