gpt4 book ai didi

php - SimpleXML 有 xmlns :xmlns ="" - no way to remove 的声明

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:06:44 28 4
gpt4 key购买 nike

太气人了,简直说不出话来。我已经使用 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>...

我不理解所有这些 namespace 声明。怎么回事?

最佳答案

SimpleXML 的问题是它的 addAttribute 函数添加了一个属性,而不是一个命名空间,虽然它看起来像您想要的那样,但并不意味着按照您使用它的方式使用它。

它旨在添加一个属于特定命名空间的值(指定为第三个参数),而不是添加命名空间本身。你最终得到 xmlns:xmlns 的原因是因为 SimpleXML 发现你在指定名称 xmlns:media 时使用了 xmlns 命名空间所以它创建了一个空的 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。使用 preg_replace

替换 xmlns:xmlns=""
echo preg_replace('/xmlns:xmlns=""\s?/', '', $rssXML->asXML());

关于php - SimpleXML 有 xmlns :xmlns ="" - no way to remove 的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6627111/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com