ホームページ > バックエンド開発 > PHPチュートリアル > SimpleXML を使用して XML 名前空間に正しくアクセスするにはどうすればよいですか?

SimpleXML を使用して XML 名前空間に正しくアクセスするにはどうすればよいですか?

DDD
リリース: 2024-12-28 21:56:19
オリジナル
618 人が閲覧しました

How Do I Access XML Namespaces Correctly Using SimpleXML?

SimpleXML での XML 名前空間へのアクセス

XML 名前空間は、それぞれの起源を保持しながら複数の XML 形式を 1 つのドキュメントにマージする方法です。 XML 名前空間は、ローカル名前空間を示すプレフィックスと名前空間を識別する URI (Uniform Resource Identifier) で構成されるコロン区切りのペアによって定義されます。

質問内のコードはなぜ機能しないのですか?

例の名前空間要素への最初のアクセス試行、つまり ->ns2:item、 SimpleXML は、children() メソッドとattributes() メソッドを使用して名前空間が定義されることを想定しているため、失敗します。

SimpleXML での名前空間へのアクセス

SimpleXML では、名前空間を処理するための 2 つの方法が提供されます。

  • 子供たち()メソッド: 特定の名前空間内の要素を選択します。これは、別の Children() 呼び出しによって元に戻るまで、オブジェクトのフォーカスをその名前空間に効果的に変更します。
  • attributes() メソッド: Children() と似ていますが、指定されたオブジェクト内の属性にアクセスするために使用されます。 namespace.

名前空間を使用したコード処理

コードの修正バージョンは次のとおりです:

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート