3

Webページのコンテンツを変数に割り当てています$html

内容の例を次に示します$html

<div class="content">something here</div>
<span>something random thrown in <strong>here</strong></span>
<div class="content">more stuff</div>

どのように、PHPを使用して、このような領域のコンテンツを見つける配列を作成できますか<div class="content"></div>(上記の例の場合)、次のようになります。

echo $array[0] . "\n" . $array[1]; //etc

出力

something here
more stuff
4

5 に答える 5

4

これがOPの単純化されたケースであり、実際の状況がより複雑であると仮定すると、XPathを使用することをお勧めします。

非常に複雑な場合は、DOMDocumentDOMXPathを使用)を使用することをお勧めしますが、SimpleXMLを使用した簡単な例を次に示します。

$xml = new SimpleXMLElement($html);

$result = $xml->xpath('//div[@class="content"]');

while(list( , $node) = each($result)) {
    echo $node,"\n";
}

このための配列の作成について明示的に質問したので、次を使用できます。

$res_Arr = array();
while(list( , $node) = each($result)) {
    $res_Arr[] = $node;
}

$res_Arr探しているコンテンツの配列になります。

php SimpleXML Xpath情報についてはhttp://php.net/manual/en/simplexmlelement.xpath.phpを、XPath仕様についてはhttp://www.w3.org/TR/xpathを参照してください。

于 2009-10-20T04:38:58.870 に答える
2

PHPには、およびを含むHTMLを処理するいくつかの手段がDomDocumentありSimpleXMLます。PHPとDOMを使用したHTMLの解析を参照してください。次に例を示します。

$dom = new DomDocument; 
$dom->loadHTML($html); 
$dom->preserveWhiteSpace = false; 
$divs = $dom->getElementsByTagName('div'); 
foreach ($divs as $div) {
  $class = $div->getAttribute('class');
  if ($class == 'content') {
    echo $div->nodeValue . "\n";
  }
}

技術的には、class属性は複数のクラスである可能性があるため、次を使用することをお勧めします。

$classes = explode(' ', $class);
if (in_array('content', $classes)) {
  ...
}

SimpleXML / XPathアプローチはより簡潔ですが、XPathルートに行きたくない場合(そして、少なくともこれらの種類のタスクを実行するのに十分な別のテクノロジーを学習したい場合)、上記はプログラムによる代替手段です。

于 2009-10-20T04:47:19.580 に答える
0

おそらく使用する必要がありますpreg_match_all()

$matches = array();
preg_match_all('`\<div(.*?)class\=\"content\"(.*?)\>(.*?)\<\/div\>`iUsm',$html,$matches,PREG_SET_ORDER);
foreach($matches as $m){
  // $m[3] represents the content in <div class="content">
}
于 2009-10-20T04:30:45.777 に答える
0

文字列操作関数や正規表現を使用する以外にできることはあまりありません。DOMライブラリを使用してHTMLをXMLとしてロードし、それを使用してdivに移動できますが、注意しない場合や構造が複雑な場合は、煩雑になる可能性があります。

http://ca3.php.net/manual/en/book.dom.php

于 2009-10-20T04:36:33.133 に答える
0

Kalem13が私を打ち負かしたように見えますが、私は同意します。DOMDocumentクラスを使用できます。個人的には使ったことがありませんが、うまくいくと思います。最初にDOMDocumentオブジェクトをインスタンス化し、次にloadHTML()関数を使用して$html変数をロードします。次に、 getElementsByTagName()関数を使用できます。

于 2009-10-20T04:38:12.193 に答える