2011-08-30 83 views
-7

这里是一个代码:DOM文档:一些基本问题

<?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. 什么是firstNode和lastNode在$ HTML?如何在这些节点内打印文本?
  2. 为什么代码的第二部分不打印任何东西?
  3. <h2>header 2</h2>这是一个单节点吗?
  4. textContet和nodeValue有什么区别?
  5. textContent,item()和childnodes的概念是什么?
  6. div#one包含多少个子代?
  7. 哪些是$ dom的childNodes?我怎样才能打印他们的名字?
  8. 这段代码的第三部分有什么错误?两条线都显示相同!

我已阅读@ Gordon的答案here,但我需要一些清晰的例子。

+0

对于这类问题感到抱歉。如果我违反规则..请随时删除此帖子 – qmaruf

+1

@qmaruf尝试一次提问一个问题 - 您可能会发现您的一些问题之前已经被提问/回答。 –

+2

您正在将一个无效的HTML片段加载到DOM中 - 它对解析的结构非常挑剔,并且用'@' - 错误的形式抑制了错误。 –

回答

1
  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

我离开了剩下的其他SO用户。