・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で拾って削除したいです。
どうすれば消えてくれるでしょうか。
必ずしもxpathにこだわらなくてもいいですよね?
ググったらsimpleXMLを使った方法で2通りくらい属性を取る方法があるようですが。
細かい検証無いのですが、、、
なぜxmlなのに div>ul>li>a の構造なのでしょうか?
xmlの構造を変えられるのかは不明ですが、
例えば
<status>bought</status>
というようなxmlの構造になってれば容易に処理できるようになると思います。
これでどうでしょうか。
>||
■XMLファイル test.xml
<div>
<ul>
<li>AAの部分</li>
<li>AAの部分</li>
<li>CCの部分</li>
<li>AAの部分</li>
<li>BBの部分</li>
</ul>
</div>
||<
unsetは複数ノードに対しての一括処理はできませんので下記のようにします
foreach($xml->xpath("//li[@id='bought']") AS $elm) {
unset( $elm[0] );
}
どうして[0]がついているのかについてはprint_r($elm) を行うなどで確認してみてくださいな
ここを見ると、やはり$elm[0] としないと変更できないのかな、と。
なかなか試す時間が取れなくて、遅くなってすみません。
$elm[0]で消えました! 良かった!
お世話になりました。