ディレクトリ下のファイル名(画像ファイル(gif、jpg、bmp等))を取得し、DOM関数を用いてXML出力したいと考えています。


画像のファイル名を取り出し、表示するだけなら、

<?php
if ($handle = opendir('./img')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
echo "$file\n";
}
}
closedir($handle);
}
?>

で表示されますが、
その取得したファイル名を

$img = $root->appendChild($doc->createElement('image'));
$img->appendChild(
$doc->createtextNode(画像ファイル名));

DOMでXML出力しようとするとうまくいきません。
取得したファイル名を表示させるにはどうすればよいのか、ご教授いただきたいのです。
よろしくお願いします。


回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2008/03/09 20:00:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント28pt

$rootや$docが何を指しているのかよく分からないのですが、append_childの指定に問題があるのではないかと思います。下記サイトを参考にしてください。

id:pinoco_5018

お早い回答ありがとうございます。

詳しいことを書かず、申し訳ありませんでした。

以下のソースでXML出力しています。

$doc = new domDocument('1.0');

$doc->formatOutput = true;

#root作成

$root = $doc->createElement('item');

$root = $doc->appendChild($root);

     #画像ファイル名出力

$img = $root->appendChild($doc->createElement('image'));

$img->appendChild(

$doc->createtextNode($file));

<image>のタグだけが空要素で吐き出されてしまいます。何が問題なのでしょうか?

2008/03/02 21:45:09
id:tobeoscontinue No.2

回答回数220ベストアンサー獲得回数59

ポイント42pt

><image>のタグだけが空要素で吐き出されてしまいます。

単純に$fileが空(設定忘れ)だったということはないでしょうか。

示されたコードではうまく動いているように見えるのですが。


ファイル名の取得に面倒なのでglob()を使っています

$doc = new domDocument('1.0');
$doc->formatOutput = true;
//#root作成
$root = $doc->createElement('item');
$root = $doc->appendChild($root);
//     #画像ファイル名出力
foreach (glob('./*.{png,jpeg,bmp}',GLOB_BRACE) as $file) {
  $img = $root->appendChild($doc->createElement('image'));
  $img->appendChild(
  $doc->createtextNode($file));
}
$doc->save("/tmp/xml.xml");

結果

<?xml version="1.0"?>

<item>

 <image>./Google.Yahoo_Web_Service.png</image>

 <image>./XML_XParse.png</image>

 <image>./android.first.png</image>

 <image>./array_html.png</image>

 <image>./capture.bmp</image>

</item>


画像のファイル名を取り出しを同じようにするならglob()は

glob('./img/*')

となりますがglobは名前だけではなくパスとして返すのでbasename()で名前だけにする必要があります。

id:pinoco_5018

サンプルまで記載頂きありがとうございました。

無事出力することができました。

2008/03/04 00:56:42

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません