2013-04-09 3 views
0

У меня есть следующий фрагмент сценария. Первоначально я не понимал, использовать getElementById, что мне нужно включить createDocumentType, но теперь я получаю ошибку, указанную выше. Что я здесь делаю неправильно? Заранее спасибо!Звонок на неопределенный метод DOMDocument :: createDocumentType()

... 
$result = curl_exec($ch); //contains some webpage i am grabbing remotely 

$dom = new DOMDocument(); 
$dom->createDocumentType('html', '-//W3C//DTD HTML 4.01 Transitional//EN', 'http://www.w3.org/TR/html4/loose.dtd'); 
$elements = $dom->loadHTML($result); 
$e = $elements->getElementById('1'); 
... 

Редактировать: Дополнительная информация, я проверил, что DOM верна на удаленной странице.

+0

Мне никогда не приходилось использовать 'createDocumentType'. Вы уверены, что 'getElementById()' не работает без него? Кроме того, идентификатор, начинающийся с цифр, технически не допускается. –

+0

Ну, нет такой вещи, как 'DOMDocument :: createDocumentType'. Откуда у вас была идея? – deceze

ответ

1

DOMDocument не имеет способа с именем createDocumentType, как вы можете видеть в Manual. Метод принадлежит DOMImplemetation class. Он используется, как это (взято из инструкции):

// Creates an instance of the DOMImplementation class 
$imp = new DOMImplementation; 

// Creates a DOMDocumentType instance 
$dtd = $imp->createDocumentType('graph', '', 'graph.dtd'); 

// Creates a DOMDocument instance 
$dom = $imp->createDocument("", "", $dtd); 

Так как вы хотите, чтобы загрузить HTML в документ, вам не нужно указывать тип документа, так как он определяется из импортируемого HTML. Вам просто нужно иметь некоторые атрибуты id или DTD, которые идентифицируют другой атрибут как идентификатор. Это часть HTML-файла, а не синтаксический анализ PHP-кода.

$dom = new DOMDocument(); 
$dom->loadHTML($result); 
$element = $dom->getElementById('my_id'); 

выполнит эту работу.

+0

В начале я использовал $ dom = new DOMDocument(); после чего сразу getElementById. Что я не понимаю из моих поисков, так это как указать атрибут id веб-страницы? Я не контролирую контент? Не могли бы вы привести пример, используя мой фрагмент, но минус createDocumentType? Тем временем я попробую свой путь. Первоначально я получал ошибку фатального на getELementById, и поиски привели меня к этому текущему решению ... – Shawn

+0

Изменение моего ответа на включение рабочего примера. – nibra

+0

WOW ok. Так что это был исходный код, который у меня был до винтовой версии выше. Тем не менее, я получал кучу ошибок и предупреждений. С вашей версией (мой оригинал) решение было так же просто, как @ $ dom-> loadHTML ($ result); выкачать ошибки. – Shawn

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