我想获取文本节点的包装器标签。鉴于这样一个任意的html
<html><body>
<p>salalala</p>
<ul><li>hehehe</li></ul>
<div class="main">
<div class="text">
<span style="cufon whatever blablabla">
Capture this text 1
</span>
</div>
</div>
<div class="main">
<div class="text">
text 2
</div>
</div>
</body>
</html>
我想获得&#34;包装标签1&#34;
<div class="main">
<div class="text">
<span style="cufon whatever blablabla">
这只是用于演示,它们可以是任何内容,但是如果文本匹配,我该如何检索包装器标签?
我一直在考虑使用php dom,并通过树来查找textnode,并从中回过头来。我不确定如何提取包装器标签。
$doc = new DOMDocument();
$doc->loadHTML($html);
//print_r($doc->childNodes);
print_children($doc);
function print_children($object){
if ($object->nodeName == "#text" AND strpos("Capture this text 1",trim($object->data)) !== false) {
print "Parent: ";
print_r($object->parentNode);
}
foreach($object->childNodes as $child) {
print_r($child);
print_children($child);
}
}
答案 0 :(得分:0)
我使用fsockopen在我想要的某个网站中检索一些HTML。这是我目前的功能如何做到这一点。
$server = 'www.somesite.com'; // or an IP address
$port = 80;
function getTextFromHTML($server, $port, $timeout=100){
$socket = fsockopen( $server, $port, $errno, $errstr, $timeout );
fputs( $socket, $request );
if ( $size > 0 ) {
$start_el = 'div class="main">';
$stop_el = '</div>';
$f_start = false;
$f_stop = false;
$tmp="";
while (!feof($socket))
{
$buffer = fgets($socket,$size);
if(!$f_start){
$strpos = mb_strpos($buffer, $start_el);
if ($strpos !== false)
{
$buffer = mb_substr($buffer, $strpos, $size);
$f_start = true;
}
}
if ($f_start && !$f_stop)
{
$strpos = mb_strpos($buffer, $stop_el);
if ($strpos !== false)
{
$f_stop = true;
}
$tmp .= $buffer;
}
}
}
fclose( $socket );
return $tmp;
}
你只需要在$ start_el和$ stop_el中进行一些配置。
希望这能帮助您明白问题