HTMLスニペットでテキストノードを見つけるにはどうすればよいですか?
質問
PHP DOM関数を使用して、HTMLスニペットを解析しようとしています。私は段落、スパン、ラインブレイクタグ以外のすべてを剥奪しましたが、今度はすべてのテキストとその付随するスタイルを取得したいと思います。
だから、私はそれぞれのテキストを1つずつ取得したいと思います。それぞれのために、木に戻って特定の属性の値を取得できます(色などの特定の属性にのみ興味があります。 。)。
これどうやってするの?それとも私はそれについて間違った方法で考えていますか?
ありがとう!
正しい解決策はありません
他のヒント
ここにdomdocumentがあるとします:
$doc = new DOMDocument();
$doc->loadHTMLFile('http://stackoverflow.com/');
単純なXPathを使用して、すべてのテキストノードを見つけることができます。
$xpath = new DOMXpath($doc);
$textNodes = $xpath->query('//text()');
ただ foreach
その上にすべてのtextnodesを反復します:
foreach ($textNodes as $textNode) {
echo $textNode->data . "\n";
}
それから、使用することでDOMツリーを上ることができます ->parentNode
.
これがあなたに良いスタートを与えることができることを願っています。
CSS3セレクターに慣れていて、プロジェクトに1つの追加のPHPクラスを含めることをいとわない人のために、私はの使用を提案します シンプルなPHP DOMパーサー. 。ソリューションは次のようになります。
$html = file_get_html('http://www.example.com/');
$ret = $html->find('p, span');
$store = array();
foreach($ret as $element) {
$store[] = array($element->tag => array('text' => $element->innertext,
'color' => $element->color,
'style' => $element->style));
}
print_r($store);
所属していません StackOverflow