PHP DOM html从另一个元素获取元素

PHP DOM html从另一个元素获取元素

问题描述:

我正在尝试为php html dom创建一些元素路径模式。PHP DOM html从另一个元素获取元素

它看起来像休闲。我可以有不同的路径,我想要一些文本。喜欢;

$elements = 'h1;span;'; 
$elements = 'div.test;h2;span'; 

我试图创建一个函数来处理这些插入,但我被困在 部分的良好秩序设置“的getElementsByTagName()”和接收的 最后一个元素的值,

我现在所做的事情;

function convertName($html, $elements) { 

     $elements = explode(';', $elements); 
     $dom = new DOMDocument; 
     $dom->loadHTML($html); 
     $name = null; 

     foreach ($elements as $element) : 
      $name. = getElementsByTagName($element)->item(0)->; 
      endforeach; 

     $test = $dom->$name.'nodeValue'; 
     print_r($test); // receive value   
    } 

我希望有人能给我一些输入或例子。

+0

(http://schlitt.info/opensource/blog/0704_xpath。 HTML)或使用支持Selector的第三方库,例如phpQuery或Zend_Dom – Gordon 2012-03-07 19:44:06

+0

我不想为这个东西放一个大类的lib,我认为必须有一个解决方案来达到这个简单的方法:) – directory 2012-03-07 20:19:32

+0

然后学习XPath – Gordon 2012-03-07 20:26:06

可能是这样的:

function convertName($html, $elements) { 
    $doc = new DOMDocument(); 
    libxml_use_internal_errors(true); 
    $doc->loadHTML($html); // loads your html 
    $xpath = new DOMXPath($doc); 

    $elements = explode(';', $elements); 
    $elemValues = array(); 

    foreach ($elements as $element) { 
     $nodelist = $xpath->query("//$element"); 
     for($i=0; $i < $nodelist->length; $i++) 
     $elemValues[$element][] = $nodelist->item($i)->nodeValue; 
    } 
    return $elemValues; 
} 

// TESTING 
$html = <<< EOF 
<span class="bar">Some normal Text</span> 
<input type="hidden" name="hf" value="123"> 
<h1>Heading 1<span> span inside h1</span></h1> 
<div class='foo'>Some DIV</div> 
<span class="bold">Bold Text</span> 
<p/> 
EOF; 

$elements = 'h1;span;'; 
// replace all but last ; with/to get valid XPATH 
$elements = preg_replace('#;(?=[^;]*;)#', '/', $elements); 
// call our function 
$elemValues = convertName($html, $elements); 
print_r($elemValues); 

OUTPUT:

Array 
(
    [h1/span] => Array 
     (
      [0] => span inside h1 
     ) 

) 
你想与[XPath]中熟悉
+0

它几乎是这样,但返回是分开的,这个将给所有文件中找到的结果。当$元素是'h1; span'时,这意味着我只想将nodeValue从'h1'中的'span'中取出。 – directory 2012-03-07 20:15:14

+0

通过xpath找到解决方案!谢谢大家! – directory 2012-03-07 20:35:48

+0

你是说'h1; span'是你的版本XPATH到h1内部的跨度?如果是这种情况,上面的代码很容易被调整。请参阅我的更新。 – anubhava 2012-03-07 20:42:28