PHP

【PHP】HTMLから特定の属性を含むタグの値を取得する関数

PHPでHTMLを解析する際にDOMDocumentを使用し、特定の属性を含むタグの値のみ取得したい場合は以下の関数で実現できる。

 

// 属性を指定し値を取得する関数
function getElementsByAttrName($elements, $attrName, $attrKind) {
    $matches = array();
    foreach($elements as $element) {
        if (!$element->hasAttribute($attrName)) {
            continue;
        }
        $classes = preg_split('/\s+/', $element->getAttribute($attrName));
        if ( ! in_array($attrKind, $classes)) {
            continue;
        }
        $matches[] = $element;
    }
    return $matches;
}

 

呼び出す側

以下は rel=”bookmark” の a タグの値を取得する例。

$myTitle = getElementsByAttrName($domDocument->getElementsByTagName('a'), 'rel', 'bookmark')[$cnt]->nodeValue;

 

更に、値ではなく属性値を取得したい場合は、呼び出し側を以下のように変更。

hrefの値を取得する例。

$myLink = getElementsByAttrName($domDocument->getElementsByTagName('a'), 'rel', 'bookmark')[$cnt]->getAttribute('href');