我目前正在为一款不使用正则表达式的游戏开发跟踪器。在尝试解析某些部分的HTML时,我遇到了障碍。
我想解析的是什么:
<td class="alt1" id="td_post_139718">
<!-- message, attachments, sig -->
<!-- icon and title -->
<div class="smallfont">
<img class="inlineimg" src="images/icons/icon1.gif" alt="Default" border="0" />
<strong>Re: TERA's E3 2010 Coverage</strong>
</div>
我的代码:
$titleArray = array();
foreach($idArray as $id) {
$title = $dom->getElementById('td_post_'.$id);
$smallFont = $title->getElementsByTagName("div");
echo $smallFont->nodeValue;
}
它产生:
Notice: Undefined property: DOMNodeList::$nodeValue in C:\wamp\www\crawler\crawler.php on line 71
Notice: Undefined property: DOMNodeList::$nodeValue in C:\wamp\www\crawler\crawler.php on line 71
Notice: Undefined property: DOMNodeList::$nodeValue in C:\wamp\www\crawler\crawler.php on line 71
我试图找到一个动态的文本。
我尝试过各种各样的组合试图让它发挥作用,但我已经能够实现它。
答案 0 :(得分:4)
::getElementsByTagName
给出节点列表。您必须遍历它以检索单个<div>
。例如:
foreach ($title->getElementsByTagName("div") as $smallFont)) {
echo htmlspecialchars($smallFont->nodeValue), "<br />;
}
您也可以使用textContent
属性。参见例如this discussion
答案 1 :(得分:3)
getElementsByTagName返回DOMNodeList,而不是单个节点。在尝试访问nodeValue之前,您必须从列表中访问单个节点:
echo $smallFont->item(0)->nodeValue;