0

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とエラーが発生します。を 3 番目の引数として追加しない'xmlns'場合、エラーは発生しませんが、レンダリングされた属性は名前空間を省略しますか?

4

2 に答える 2

1

エラーメッセージ:

xmlns プレフィックスの再定義は禁止されています

これは、xmlns が XML で定義されているためです (XML の文字で始まるすべての名前は大文字と小文字に関係なく予約されています)、"xmlns" をプレフィックスとして使用することはできません。ただし、コードではプレフィックスとして使用します。

$rss->addAttribute('xmlns:dc', "http://purl.org/dc/elements/1.1/", 'xmlns');
                    #####                                           #####

そのような属性を追加することは不可能です。そのコード行を削除すると、エラーはなくなります。「php simplexmlドキュメントにrss xmlns名前空間定義を追加しますか?」に対する受け入れられた回答に示されているように、新しいオブジェクトを作成するときに文字列に名前空間宣言を追加します。.

このクリスタルを明確にするには: を使用SimpleXMLElement::addAttribute()して XML 名前空間を宣言することはできません。


編集: SimpleXML はもともと XML 名前空間を処理するようには設計されておらず、すべての機能に簡単にアクセスできる (または単純な) わけではありません。おそらく最もクリーンな方法は、姉妹ライブラリDOMDocument (「DOM」) を使用することです。

SimpleXMLに名前空間宣言を追加する方法の詳細については、Stackoverflow サイトにある次の既存の Q&A 資料を参照してください。

于 2013-06-11T13:54:22.740 に答える