人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SimpleXmlを使って、idで指定した要素を消すにはどうしたらいいですか?

・DVDリストから購入済みのもの(id='bought')を非表示にしたい。
・div>ul>li>a の形のデータで、liの数は不特定。
・liの中にさらにulが含まれる場合もある。

【やってみたこと:1】→×
$xml =simplexml_load_file("dvd.xml");
unset( $xml->xpath("//li[@id='bought']") );
echo $xml->asXML();

【やってみたこと:2】→×
$xml =simplexml_load_file("dvd.xml");
foreach( $xml->xpath("//li") as $elm ){
if($elm["id"]=="bought"){ unset( $elm ); }
}
echo $xml->asXML();

要素の構造が不確定なので、何とかxpathとidで拾って削除したいです。
どうすれば消えてくれるでしょうか。

●質問者: k_gobo
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:as DVD echo UL XML
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kou32rr
●0ポイント

細かい検証無いのですが、、、

なぜxmlなのに div>ul>li>a の構造なのでしょうか?

xmlの構造を変えられるのかは不明ですが、

例えば

<status>bought</status>

というようなxmlの構造になってれば容易に処理できるようになると思います。

◎質問者からの返答

元データがXHTMLなのです。

これを変えずに拾いたいと思っています。


2 ● la-la-land
●40ポイント ベストアンサー

必ずしもxpathにこだわらなくてもいいですよね?

ググったらsimpleXMLを使った方法で2通りくらい属性を取る方法があるようですが。

http://pugiemonn.blog6.fc2.com/blog-entry-1184.html

http://php2.g.hatena.ne.jp/py4s-tnk/20091017/1255800920

◎質問者からの返答

データ内容を個別に拾って整形して出力という方法ではなく、元データXHTMLの構造をそのまま利用して出力したいので、$xmlから#boughtだけ削除して吐き出したいと思っています。


3 ● kou32rr
●40ポイント

2回目投稿になります・・・

以下の内容でテストできました。

具体的なファイル内容不明なのでダミーデータです。

■XMLファイル test.xml


■PHP test.php

$xml =simplexml_load_file("test.xml");

foreach( $xml->ul->li as $elm ){

if($elm['id'] != "bb"){

print_r( $elm );

}

}

?>

これで、bbではない要素のaaとccの結果がprint_rできます。

後は配列の加工を望む形にすればよいと思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ