質問: PHPのマニュアルでも目的を達成するためのコードが思いつかなかったため、 ご質問させてください。 結論を申し上げますと 1) c属性が333を満たすタグについて 2) b属性の値("222")を取得したい が目的になります。 すべてgetElementByIdでノードを指定してから、getAttributeでcを配列に入れて すべての要素が"333"に一致するかを検索する方法は思いつくのですが、検索したいc属性の値も 検索対象のノードも大量にあるため、これをすべてループで処理させることはあまり賢しい方法とは 思えないのですが、何か良い方法があればアドバイスを頂ければ幸いです。 宜しくお願い申し上げます。 ``` ``` (加筆) うまくご説明できるかわかりませんが、申し少し分かりやすい例でコードを記載させて頂きます。 ``` $cArray=array(111,222,333,444,555,666,777,888,999); $xml=' ';//失礼しました、分かりやすいように修正します $num=($sampleNode->length);//A,B,Cで3つ for ($i=0; $i < $num; $i++) { $searchNode=$sampleNode->item($m)->getAttribute('c'); $resultArray[]=$searchNode; } $num2=count($cArray);//9つ for ($i=0; $i <$num2 ; $i++) { //ループで111,222,333~999がc属性のものをすべて検索 if ($cArray[$i]==$resultArray[0]) { $key=0; } elseif($cArray[$i]==$resultArray[1]){ $key=1; }elseif($cArray[$i]==$resultArray[2]){ $key=2; } $fruit[]=$sampleNode->item($key)->getAttribute('b');//111,222,444,555,,777,888はxmlに存在しないためNull 333=>banana 666=>peach 999=>mangoが取得できる } ```
回答: DOM操作は殆どやったことが無いので DOMDocument 要素 検索 php で検索して、たどり着いた mpywさんの PHPネイティブのDOMによるスクレイピング入門 を参考にしたところ、XPath式で検索するのが楽そうな感じなのでやってみました。 *随時PHPマニュアルの該当クラスページも参照しながら* 多分、以下の様な内容でいけるんじゃないでしょうか。 ``` '; $dom = new DOMDocument; $dom->loadXML($xml); $xpath = new DOMXPath($dom); $nodeList = $xpath->query('//A[@c="333"]/@b'); foreach($nodeList as $domAttr){ var_dump($domAttr->value); } ``` 実行結果 string(6) "banana" string(4) "piyo"