2011-01-09 6 views
0

とXMLの内容にPHPとXMLについてのもう一つの質問に基づいて、子どもたちを除外します。は</p> <p>が子供の内容に基づいて子供を除外することがかのうです... PHP(のSimpleXML)

以下の例を参照してください。 「タイトル」に「XTRA:」という単語が含まれている場合、この「ムービー」は表示されません。

これは私のPHPコードです:

<? $xml = simplexml_load_file("movies.xml"); 
foreach ($xml->movie as $movie){ ?> 

<h2><? echo $movie->title ?></h2> 
<p>Year: <? echo $movie->year ?></p> 

<? } ?> 

これはMYS XMLファイルである:上記のコードの結果がある

<?xml version="1.0" encoding="UTF-8"?> 
<movies> 
    <movie> 
     <title>Little Fockers</title> 
    <year>2010</year> 
</movie> 
<movie> 
    <title>Little Fockers XTRA: teaser 3</title> 
    <year>2010</year> 
</movie> 
</movies> 

<h2>Little Fockers</h2> 
<p>Year: 2010</p> 

<h2>Little Fockers XTRA: teaser 3</h2> 
<p>Year: 2010</p> 

私はそれだけになりたい:

<h2>Little Fockers</h2> 
<p>Year: 2010</p> 
+0

こんにちはdqhendricksとprodigitalson、 私は私が得る答えを答えるalsways午前:その場合は、次のようなPHPソリューションにフォールバックすることができます。私はあなたの助けに非常に感謝しています。私は他の質問をしたときに私のクックイーを無効にしました。答えることを試みたができなかった...同じ人がこの質問に答えることを望んでいたので、私は皆さんに感謝することができた(これはさらに問題である)... – Hakan

答えて

1

ノードをフィルタリングするには、2つの方法があります。最初はXPath 1.0でここ(のlibxml/SimpleXMLはでサポートされているバージョン)

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

foreach ($movies->xpath('movie[not(contains(title, "XTRA:"))]') as $movie) 
{ 
    echo '<h2>', $movie->title, '</h2>'; 
} 

で、我々は、XPathのPHP's strpos()に相当しcontains functionを、使用しています。残念なことに、XPath 1.0には文字列関数しかなく、大文字と小文字が区別されます。したがって、XPathは複雑な階層構造を処理するのに非常に適していますが、文字列を扱うのはあまりうまくありません。

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

foreach ($movies->movie as $movie) 
{ 
    if (stripos($movie->title, 'XTRA:') !== false) 
    { 
     // skip to next iteration 
     continue; 
    } 

    echo '<h2>', $movie->title, '</h2>'; 
} 
+0

こんにちはジョシュ、すばらしい答えをありがとう!どちらの例も素晴らしいです。 これは、PHPとXMLを学ぶときに非常に役立ちます。 ありがとうございました! – Hakan

関連する問題