・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の構造になってれば容易に処理できるようになると思います。
元データがXHTMLなのです。
これを変えずに拾いたいと思っています。
必ずしもxpathにこだわらなくてもいいですよね?
ググったらsimpleXMLを使った方法で2通りくらい属性を取る方法があるようですが。
データ内容を個別に拾って整形して出力という方法ではなく、元データXHTMLの構造をそのまま利用して出力したいので、$xmlから#boughtだけ削除して吐き出したいと思っています。
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できます。
後は配列の加工を望む形にすればよいと思います。
データ内容を個別に拾って整形して出力という方法ではなく、元データXHTMLの構造をそのまま利用して出力したいので、$xmlから#boughtだけ削除して吐き出したいと思っています。