Проблема с PHP DOM - PullRequest
       12

Проблема с PHP DOM

1 голос
/ 27 августа 2009

Привет, у меня проблема с этим кодом, я нашел его в интернете, и когда я проверял его, он дал мне следующий код ошибки:

Ошибка разбора: ошибка разбора, неожиданный конец $ в строке 52

Вот скрипт:

<?php
function walkDom($node, $level = 0)
{
$indent =";


for ($i = 0; $i nodeType != XML_TEXT_NODE)
{
         echo $indent.''.$node->nodeName.'';


          if( $node->nodeType == XML_ELEMENT_NODE )
          {
          $attributes = $node->attributes; 


              foreach($attributes as $attribute)
              {
               echo ', '.$attribute->name.'='.$attribute->value;

              }
          }


if( strlen(trim($node->childNodes->item(0)->nodeValue)) > 0 && count($cNodes) == 1 ) {
echo ".$indent.'(contains='.$node->childNodes->item(0)->nodeValue.')'; 
}


echo ";
}



$cNodes = $node->childNodes;

if (count($cNodes) > 0)
{
      $level++ ; 
      foreach($cNodes as $cNode) {
      walkDom($cNode, $level); 
      $level = $level – 1; 
      }
}


}

$doc = new DOMDocument();
$doc->loadHTMLFile('http://www.google.se');
walkDom($doc);
?>

Ответы [ 3 ]

5 голосов
/ 27 августа 2009

Основная проблема в том, что это мусор.

Похоже, код изначально должен был быть средством форматирования для отображения узлов XML в форме отладки. Но это было безвозвратно искажено.

Здесь явно отсутствуют символы - неопределенные строковые литералы, строка «for ($ i = 0; $ i nodeType! = XML_TEXT_NODE)» (что бессмысленно и выглядит как две разные строки, соединенные вместе) ...

Вам лучше сказать, что вы на самом деле хотите сделать, и написать код, чем пытаться выполнить случайный неработающий «код в Интернете», не понимая, что он делает.

4 голосов
/ 27 августа 2009

Похоже, у вас есть несколько незамкнутых строковых литералов.

здесь:

$indent =";

и здесь:

echo ";

Эти строки, вероятно, должны быть:

$indent ="";

и

echo "";

Также эта строка:

for ($i = 0; $i nodeType != XML_TEXT_NODE)

полностью сломан. Я не уверен, что они собирались здесь. Вероятно, они хотели это сделать, поскольку $ i фактически никогда не используется ни для чего:

while( $node->nodeType != XML_TEXT_NODE )

В целом, я бы с подозрением отнесся к тому, что этот код вообще будет работать ..

2 голосов
/ 27 августа 2009

Если все, что вы хотите сделать, это предварительно настроить вывод, DOMDocument может помочь вам в этом.
Установите для объекта DOMDocument значение , «отбрасывайте» ненужные пробелы , и пусть отформатирует вывод .

$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->formatOutput = true;
$doc->loadHTMLFile('http://www.google.se');
echo $doc->savexml();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...