質問

私は、DOMはPHPでパースへの新たなんだ:
私は私が解析しようとしているHTMLファイルを持っています。これは、このようなdiv要素の束を持っています:

<div id="interestingbox"> 
   <div id="interestingdetails" class="txtnormal">
        <div>Content1</div>
        <div>Content2</div>
   </div>
</div>

<div id="interestingbox"> 
......

私は、PHPを使用して多くのDIVボックスの内容を取得しようとしています。 どのように私はこれを行うにはDOMパーサーを使用することができますか?

ありがとうございます。

役に立ちましたか?

解決

まず、私はあなたが二つの異なる複数のdivに同じIDを使用することができないことを伝えるために持っています。その点のクラスがあります。すべての要素が一意のIDを持っている必要があります。

コードは、ID = "interestingbox"

とのdivの内容を取得します
$html = '
<html>
<head></head>
<body>
<div id="interestingbox"> 
   <div id="interestingdetails" class="txtnormal">
        <div>Content1</div>
        <div>Content2</div>
   </div>
</div>

<div id="interestingbox2"><a href="#">a link</a></div>
</body>
</html>';


$dom_document = new DOMDocument();

$dom_document->loadHTML($html);

//use DOMXpath to navigate the html with the DOM
$dom_xpath = new DOMXpath($dom_document);

// if you want to get the div with id=interestingbox
$elements = $dom_xpath->query("*/div[@id='interestingbox']");

if (!is_null($elements)) {

  foreach ($elements as $element) {
    echo "\n[". $element->nodeName. "]";

    $nodes = $element->childNodes;
    foreach ($nodes as $node) {
      echo $node->nodeValue. "\n";
    }

  }
}

//OUTPUT
[div]  {
        Content1
        Content2
}
クラスと

例:

$html = '
<html>
<head></head>
<body>
<div class="interestingbox"> 
   <div id="interestingdetails" class="txtnormal">
        <div>Content1</div>
        <div>Content2</div>
   </div>
</div>

<div class="interestingbox"><a href="#">a link</a></div>
</body>
</html>';

//the same as before.. just change the xpath

[...]

$elements = $dom_xpath->query("*/div[@class='interestingbox']");

[...]

//OUTPUT
[div]  {
        Content1
        Content2
}

[div]  {
a link
}

詳細については DOMXPathを使うことの最大のページを参照してください。

他のヒント

私はこれが開始と simplehtmldomするを使用して動作するようになった。

$html = file_get_html('example.com');
foreach ($html->find('div[id=interestingbox]') as $result)
{
    echo $result->innertext;
}

<のhref = "http://www.sitepoint.com/forums/showthread.php?611393-php5-need-something-like-innerHTML-instead-of-nodeValue" のrel = "nofollowをから非常に素晴らしい機能を「> http://www.sitepoint.com/forums/showthread.php?611393-php5-need-something-like-innerHTML-instead-of-nodeValue の

function innerXML($node) 

{ 

    $doc  = $node->ownerDocument; 

    $frag = $doc->createDocumentFragment(); 

    foreach ($node->childNodes as $child) 

    { 

        $frag->appendChild($child->cloneNode(TRUE)); 

    } 

    return $doc->saveXML($frag); 

}  


$dom = new DOMDocument(); 

$dom->loadXML(' 

<html> 

<body> 

<table> 

<tr> 

    <td id="foo">  

        The first bit of Data I want 

        <br />The second bit of Data I want 

        <br />The third bit of Data I want 

    </td> 

</tr> 

</table> 

<body> 

<html> 



'); 

$xpath = new DOMXPath($dom); 

$node = $xpath->evaluate("/html/body//td[@id='foo' ]"); 

$dataString = innerXML($node->item(0)); 
$dataArr = explode("<br />", $dataString); 

$dataUno = $dataArr[0]; 
$dataDos = $dataArr[1]; 
$dataTres = $dataArr[2]; 

echo "firstdata = $nameUno<br />seconddata = $nameDos<br />thirddata = $nameTres<br />"  

WebExtractor: https://github.com/knyga/webextractorする これは、CSS、正規表現、XPathのセレクタでページを解析することができます。

例については、

ルックパッケージとテストます:

  

WebExtractor \ DataExtractor \ DataExtractorFactoryを使用します。つかいます   WebExtractor \ DataExtractor \ DataExtractorTypes。つかいます   WebExtractor \クライアント\クライアント;

     

$工場= DataExtractorFactory ::のgetFactory(); $抽出=   $出荷時> createDataExtractor(DataExtractorTypes :: CSS)。 $クライアント=新しいです   クライアント; $コンテンツ=   $クライアント - > GET( ' https://en.wikipedia.org/wiki/2014_Winter_Olympicsする' );   $ extractor->のsetContent($コンテンツ); $ H1 =   $ extractor-> setSelector( 'H1') - >エキス();

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top