PHP简单HTML Dom:获取childNodes节点值



a.php:

<ul id="ul1">
    <li id="pt1">Point 1
         <ul id="ul2">
             <li id="pt11">Point 1.1</li>
             <li id="pt12">Point 1.2</li>
                <pre class="CodeDisplay">
                some codes
                </pre>
             <li id="ref">Reference: <a href="link.html" target="_blank">link</a></li>
         </ul>
    </li> 
</ul>

我只想获得nodeValue"Point 1"。在JS中,它是:

alert(document.getElementsByTagName("li")[0].childNodes[0].nodeValue);

但是我想得到PHP中的nodeValue(SimpleHTMLDom);以下是另一个PHP页面(b.PHP)中的代码片段:

<?php
include('simple_html_dom.php');
$html = file_get_html('http://lifelearning.net63.net/a.php');
// stuck here:
echo $html->getElementsByTagName('ul',0)->getElementsByTagName('li',0)->nodeValue;
//
?>

我使用了textContent,但它只是提取第1点下的子内容。这不是我想要的。我只想要"第1点"。感谢您的帮助!

试试这个:

<?php
include('simple_html_dom.php');
$html = file_get_html('http://lifelearning.net63.net/a.php');
echo $html->find('li[id=pt1] li', 0)->innertext;

上面的代码段找到第一个(下降到li#pt1)匹配的li标记,并给出内部文本(文本之间的内容,包括其中的所有HTML,如果有的话)。

看看SimpleHTMLDom文档。有许多方法和示例可以从HTML输出中查找内容(ID、类等)。SimpleHTMLDom主要遵循jQuery/CSS选择器。

请注意,如果您不使用innertext方法,它将返回一个SimpleHTMLDom节点,您需要在显示该节点之前对其进行处理。

如果没有匹配的元素,它将返回一条E_WARNING错误消息。因此,请确保您的输入包含require元素,或者确保该元素与isset() 一起存在

在其他在线人员的帮助下,建议使用一种更简单的解决方案:

$html = new DOMDocument();
$html->loadHTMLFile('http://lifelearning.net63.net/a.php');
echo $html->getElementsByTagName('li')->item(0)->childNodes->item(0)->textContent; // returns "Point 1"

我学到的是

首先,在我的情况下,不需要任何外部库,DOMDocument负责获取网页的HTMLDOM。

其次,使用item()和childNodes。非常像JS中的内容:

document.getElementsByTagName("li")[0].childNodes[0].nodeValue

但是谢谢你的回复。

u可能正在查找此

 <?php  $str2 =     ' <ul id="ul1"> ' ;?>
 <?php  $str2 .=    '<li id="pt1"><div>Point 1</div> ' ;?>
 <?php  $str2 .=    ' <ul id="ul2"> ' ; ?>
 <?php  $str2 .=    '     <li id="pt11">Point 1.1</li>' ; ?>
 <?php  $str2 .=    '    <li id="pt12">Point 1.2</li>' ; ?>
 <?php  $str2 .=    '     <pre class="CodeDisplay">' ; ?>
 <?php  $str2 .=    '     some codes' ; ?>
 <?php  $str2 .=    '     </pre>' ; ?>
 <?php  $str2 .=    '    <li id="ref">Reference: <a href="link.html" target="_blank">link</a></li>' ; ?>
 <?php  $str2 .=    '  </ul>' ; ?>
 <?php  $str2 .=    '   </li> ' ; ?>
 <?php  $str2 .=    ' </ul>' ; ?>
 <?php
 function getTextBetweenTags($string, $tagname) {
     $pattern = "/<$tagname ?.*>(.*)</$tagname>/";
     preg_match($pattern, $string, $matches);
     return $matches[1];
     }
   $txt = getTextBetweenTags($str2, "div");
   echo $txt;
   ?>
   will output : -->  Point 1 

相关内容

  • 没有找到相关文章

最新更新