2011-08-30 2 views
-7

вот код:DOMDocument: некоторые основные вопросы

<?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 # 1?
  7. Каковы childNodes из $ dom? Как я могу напечатать их имена?
  8. Какая ошибка в третьей части этого кода? Обе линии показывают то же самое!

Я прочитал ответ Гордона от 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 пользователей.

Смежные вопросы