SimpleXML での XML 名前空間へのアクセス
XML 名前空間は、それぞれの起源を保持しながら複数の XML 形式を 1 つのドキュメントにマージする方法です。 XML 名前空間は、ローカル名前空間を示すプレフィックスと名前空間を識別する URI (Uniform Resource Identifier) で構成されるコロン区切りのペアによって定義されます。
質問内のコードはなぜ機能しないのですか?
例の名前空間要素への最初のアクセス試行、つまり ->ns2:item、 SimpleXML は、children() メソッドとattributes() メソッドを使用して名前空間が定義されることを想定しているため、失敗します。
SimpleXML での名前空間へのアクセス
SimpleXML では、名前空間を処理するための 2 つの方法が提供されます。
名前空間を使用したコード処理
コードの修正バージョンは次のとおりです:
define('XMLNS_EG1', 'http://example.com'); define('XMLNS_EG2', 'https://namespaces.example.org/two'); define('XMLNS_SEQ', 'urn:example:sequences'); foreach ($sx->children(XMLNS_EG1)->list->children(XMLNS_EG2)->item as $item) { echo 'Position: ' . $item->attributes(XMLNS_SEQ)->position . "\n"; echo 'Item: ' . (string)$item . "\n"; }
または、simplexml_load_string などの関数の $namespace_or_prefix パラメーターを使用して、ドキュメントをロードするときに初期名前空間を指定できます。
注: を推奨します。プレフィックスは変更される可能性があり、コードが破損する可能性があるため、プレフィックスの代わりに完全な名前空間 URI を使用してください。
以上がSimpleXML を使用して XML 名前空間に正しくアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。