DOMDocument:一些基本问题


DOMDocument : some basic questions

这里有一个代码:

<?php
$html = <<< HTML
    <div id="one">
<h1>header 1</h1>
<h2>header 2</h2>
<blockquote>
    <p>paragraph1</p>
    <p>paragraph2</p>
</blockquote>
    <b>bold text1</b>
<b>bold text2</b>
</div>
HTML;

$dom = new DOMDocument();
@$dom->loadHTML($html);
/******************3rd part*************/
     echo $dom->childNodes->item(0)->nodeName."<br>";
 echo $dom->childNodes->item(1)->nodeName."<br>";

    /**********1st part**********/
$tags = $dom->getElementsByTagName("blockquote");
foreach($tags as $tag)
{
    $ps=$tag->getElementsByTagName("p");
    foreach($ps as $p)
    {
        echo $p->nodeValue."<br>";
    }
}
/************2nd part**********/
$tags = $dom->getElementById("one");
foreach($tags as $tag)
{
    $hs=$tag->getElementsByTagName("h1");
    foreach($hs as $h)
    {
        echo $h->nodeValue."<br>";
    }
}

?>

请以身作则:

  1. $html中的firstNode和lastNode是什么?我如何打印这些节点中的文本?
  2. 为什么代码的第二部分什么也不打印?
  3. <h2>header 2</h2>是单节点吗?
  4. textcontext和nodeValue的区别是什么?
  5. textContent, item()和子节点的概念是什么?
  6. div# 1包含多少个子节点?
  7. $dom的子节点有哪些?我怎么打印他们的名字?
  8. 这段代码第三部分的错误是什么?两行显示的是相同的!

我从这里读了@Gordon的回答,但我需要一些明确的例子。

  1. 都是<div id="one">注意所有的h1, h2和blockquote节点都是这个节点的子节点。
  2. $dom->getElementById(0);将返回第一个元素。$dom->getElementById(1);将返回第二个(如果它存在)id是这个标签中属性的名称<div id="one">
  3. 不明白这个问题。单节点是什么意思?
  4. textContent: childNodes中的所有文本(http://www.w3schools.com/dom/prop_element_textcontent.asp);nodeValue:节点的值,取决于它的类型http://www.w3schools.com/dom/prop_document_nodevalue.asp
  5. 继续读…这个http://www.w3schools.com/htmldom/default.asp