1

PHPで「simplexml_load_file」を使用してXMLファイルをロードしましたが、そこからいくつかの要素を読み取ってPHPで出力したいと考えています。私のXMLファイルが複雑すぎるため、私が見つけたすべての方法は成功しませんでした...私が見つけた最良のものは次のとおりです。

SimpleXMLElement から値を抽出する方法について投稿を追加したかっただけです。あなたが思うほど簡単ではありません。複雑なオブジェクトであるため、要素に直接アクセスすることはできません。SimpleXmlElement の var_dump を表すデータのサンプルを次に示します。

array(1) { [0]=> object(SimpleXMLElement)#13 (2) { ["@attributes"]=> array(1) { ["name"]=> string(5) "title" } [0 ]=> string(19) "PHP Tech Book" } }

本のタイトルを抽出したい場合は、指定された要素をそのように文字列にキャストする必要があります。$newTitle = (文字列) $title[0];

$title 変数は、たとえば simplexml_load_string を使用して xml ドキュメントから抽出した SimpleXMLElement です。最初に xml ドキュメントから title 要素にアクセスするには、xpath を使用して同様に行うことができます。$title = $doc->xpath('str[@name="title"]');

これが誰かを助けることを願っています。

「$title = $doc->xpath('str[@name="title"]');」を使ってみました 独自の XML ファイルを独自の要素に置き換えますが、PHP エラーが発生します。

PHP エラーが発生しました重大度: 通知メッセージ: 配列から文字列への変換ファイル名: views/welcome_message.php 行番号: 79

これは私のコードです:

<?php
    if (file_exists('data.xml')) {
        $xml = simplexml_load_file('data.xml');

    $title = $xml->xpath('str[@name="name"]');
    echo $title;

    } else {
        exit('Failed to open test.xml.');
    }
    ?>

これは、非常に紛らわしい xml ファイルから少し抜粋したものです。

SimpleXMLElement オブジェクト ( [フォルダ] => SimpleXMLElement オブジェクト ( [@attributes] => 配列 ( [名前] => ABC ) [ファイル] => SimpleXMLElement オブジェクト ( [@attributes] => 配列 ( [名前] => DEF [サイズ] ] => 123 [作成時間] => 03.09.2012 16:36:59 [最終書き込み時間] => 06.09.2012 10:46:39 [id3v2] => 1 [v2 タグ PRIV] = > XMP ; WM/MediaClassSecondaryID; WM/MediaClassPrimaryID ?}`?#??K??H?*(D; WM/プロバイダー AMG; WM/WMContentID ?????E?@??B????; WM/WMCollectionID ?Yd??B??N5 ?; WM/WMCollectionGroupID ]?????N?????^e; WM/UniqueFileIdentifier AMG a _ id = R 2 0 5 6 3 8 9 ; AMG p _ id = P 2 6 4 5 ; AMG t _ id = T 2 2 1 6 6 0 0 3 [v2-トラック] => 2 [v2-曲名] => FGH [v2-アルバム] => IJK [ v2-genre] => (12) [v2-tag-TPUB] => LMN [v2-tag-TYER] =>1997 [v2-tag-TPE2] => OPQ [v2-composer] => RST [v2-artist] => UVW [id3v1] => 1 [曲名] => XYZ [アーティスト] => ARTIST1 [アルバム-タイトル] => TITLE1 [年] => 1997 [コメント] => [トラック] => 2 [ジャンル] => その他 [mpeg-version] => 1 [mpeg-layer] => 3 [ビットレート] => 320Kbps [サンプリングレート] => 48000Hz [チャンネルモード] => JointStereo ) )

[@attributes] に「@」があるのはなぜですか?どうすれば対処できますか? さまざまな要素から情報を取得するにはどうすればよいですか?

4

2 に答える 2

0

SimpleXML->xpath()関数は、それぞれが XPath 式に一致する要素または属性を表す SimpleXML オブジェクトの配列を返します。

したがって、最初に、結果をループする必要があります (または最初の結果を で取得し[0]ます)。次に、見つかった SimpleXML オブジェクトを使用して何かを行う必要があります。属性の場合(string)$sx_attribは、その値が表示されます。それ以外の場合は、さらに操作を行う必要があります。

最後に、 SimpleXML オブジェクトではvar_dumpprint_r、またはvar_exportを使用しないでください。これらは「実際の」PHP オブジェクトではなく、非 PHP データのラッパーであるためです。simplexml_dump代わりに使用してください。

于 2012-09-12T12:50:34.733 に答える
0

「重い」dom操作に対処しなければならないときは、常にsimple_html_domを使用します。試してみてください。役立つかもしれません。

于 2012-09-08T05:36:16.323 に答える