[英]Create array from the contents of <div> tags in php
我有一個分配給變量$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>
區域的<div class="content"></div>
(對於上面的例子),所以:
echo $array[0] . "\n" . $array[1]; //etc
輸出
something here
more stuff
假設這只是OP中的一個簡化案例,而且實際情況更復雜,那么您將需要使用XPath。
如果它真的很復雜,那么你可能想要使用DOMDocument (使用DOMXPath ),但這是一個使用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
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路徑(並且學習另一種技術,至少足以完成這些類型的任務),那么上面是一種程序化的替代方案。
你可能需要使用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">
}
沒有太多你可以做不到使用字符串操作函數或正則表達式。 您可以使用DOM庫將HTML作為XML加載並使用它遍歷您的div,但如果您不小心或結構復雜,這可能會變得很麻煩。
看起來Kalem13打敗了我,但我同意。 您可以使用DOMDocument類。 我沒有親自使用它,但我認為這對你有用。 首先,實例化DOMDocument對象,然后使用loadHTML()函數加載$ html變量。 然后你可以使用getElementsByTagName()函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.