2

これまでのところ、私のコードは xPath クエリを使用してすべてのクラス 'forumRow' を取得しています。すべての「forumRow」クラスに一度存在するa要素のhref属性を取得するにはどうすればよいですか?

最初のクエリの結果から始まるクエリを実行できる時点で、ちょっと立ち往生しています。

私の現在のコード

            $this -> boards = array();
            $html = @file_get_contents('http://www.roblox.com/Forum/Default.aspx');

            libxml_use_internal_errors(true);
            $page = new DOMDocument();
            $page -> preserveWhiteSpace = false;
            $page -> loadHTML($html);

            $xpath = new DomXPath($page);
            $board_array = $xpath -> query('//*[@class="forumRow"]');

            foreach($board_array as $board)
            {
                $childNodes = $board -> childNodes;
                $boardName = $childNodes -> item(0) -> nodeValue;

                if (strlen($boardName) > 0)
                {

                    $boardDesc = $childNodes -> item(1) -> nodeValue;
                    array_push($this -> boards, array($boardName, $boardDesc));
                }
            }
            $Cache -> saveData(json_encode($this -> boards));
4

2 に答える 2

4

悲しいことに、私はあなたのコードを機能させることができませんでした(フォーラム行の抽出に関して<td>)-代わりにこれを作成しました:

$html = @file_get_contents('http://www.roblox.com/Forum/Default.aspx');
libxml_use_internal_errors(true);
$page = new DOMDocument();
$page->preserveWhiteSpace = false;
$page->loadHTML($html);
$xpath = new DomXPath($page);

foreach($xpath->query('//td[@class="forumRow"]') as $element){
    $links=$element->getElementsByTagName('a');
    foreach($links as $a) {
        echo $a->getAttribute('href').'<br>';
    }
}

生産する

/Forum/Search/default.aspx
/Forum/ShowForum.aspx?ForumID=46
/Forum/ShowForum.aspx?ForumID=14
/Forum/ShowForum.aspx?ForumID=44
/Forum/ShowForum.aspx?ForumID=43
/Forum /ShowForum.aspx?ForumID=45
/Forum/ShowForum.aspx?ForumID=21
/Forum/ShowForum.aspx?ForumID=13
...
非常に長いリスト

からのすべての href <td class="forumRow">..<a href= ... ></a>..</td>

于 2013-10-04T15:48:11.907 に答える