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(Simple HTML Dom);这是另一个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,但它只提取了Point 1下的内容后代。这不是我想要的。我只想要“Point 1”。 任何帮助表示赞赏!
答案 0 :(得分:1)
<?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
答案 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 docs。有许多方法和示例可以从HTML输出中找到内容(ID,类等)。 SimpleHTMLDom主要遵循jQuery / CSS选择器。
请注意,如果您不使用innertext
方法,它将返回您需要在显示之前处理的SimpleHTMLDom节点。
如果没有匹配的元素,它将返回E_WARNING
错误消息。因此,请确保您的输入包含require元素,或确保元素存在isset()
答案 2 :(得分:0)
在网上其他人的帮助下,建议采用更简单的解决方案:
$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负责获取网页的HTML DOM。
其次,使用item()和childNodes。非常像JS中的内容:
document.getElementsByTagName("li")[0].childNodes[0].nodeValue
但是,谢谢你的回复。