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] に「@」があるのはなぜですか?どうすれば対処できますか? さまざまな要素から情報を取得するにはどうすればよいですか?