【发布时间】:2023-04-03 02:47:01
【问题描述】:
我正在尝试使用 PHP 创建将用于 RSS 提要的 XML 文档。我已经让它大部分工作了,但是我在尝试向我的文档中添加一个带有命名空间的属性时得到一个error on line 2 at column 29: redefinition of the xmlns prefix is forbidden。
我在这里尝试了接受的答案:
Add rss xmlns namespace definition to a php simplexml document? 但这会将第一行更改为 <rss... 而不是 <xml...
这是我正在使用的代码:
<?php
$xml = new SimpleXMLElement('<xml vesion="1.0" />');
$rss = $xml->addChild('rss');
$rss->addAttribute('version','2.0');
$rss->addAttribute("xml:base",'http://intranet/bapm/rss-avd','xml');
$rss->addAttribute('xmlns:dc',"http://purl.org/dc/elements/1.1/",'xmlns');
....
添加xml:base 属性的行工作正常,但是当我添加添加xmlns:dc 属性的行时,我得到了错误。如果我不添加 'xmlns' 作为第三个参数,我不会收到任何错误,但是渲染的属性省略了命名空间?
【问题讨论】:
-
请仔细检查,您提供的 XML 无效:eval.in/33360 - 以三个字母
XML开头的元素在 XML 中保留。不要使用它们。 (并且您可能不想在这里创建这样的根元素) - 所以请在发布问题之前先进行一些故障排除。 -
元素名称的相同规则也适用于属性名称顺便说一句,
$rss->addAttribute('xmlns:dc', ...永远无法工作因为那是一个无效的属性。与根元素一样,您很可能想在这里做一些不同的事情,例如添加一个 Namespace Declaration 可能在您的眼中看起来像一个属性 - 但它不是一个(是的请记住,它不是一个属性,它看起来像一个,但它不是一个属性)。 -
此外,您在问题中写的内容是错误的:您没有尝试那里接受的答案,它与您在这里所做的不同,修复该差异,您应该没问题。
-
我确实在那里尝试了接受的答案,并且在我在这里发布之前我确实解决了问题,但是感谢你的蛇,它帮助很大。
-
是的,但请尝试理解为什么事情不起作用。错误消息只是一个提示,您需要了解,因为链接的答案确实解决了问题。我还给您留下了答案(并立即使用更多资源对其进行了编辑),希望能为您提供足够的帮助来处理您的问题。
标签: php xml xml-namespaces