2014-11-14 2 views
0

Я использую HTML DOM Parser for PHP и испытываю трудности с извлечением координат из этого javascript. Есть какие-то подсказки? Благодарю.PHP parse javascript

<script type="text/javascript"> 
//<![CDATA[ 
    LoadMarker(parseFloat(45.5364416896354),parseFloat(-122.959525248125), 'seizures', '141101942', 'wccca'); 
    LoadMarker(parseFloat(45.3885251463509),parseFloat(-122.813856693134), 'cardiac arrest', '141101935', 'wccca'); 
    resizeIncidentScrollBar('#wccca-incidents'); 
    LoadMarker(parseFloat(45.3926967266394),parseFloat(-122.622226603465), 'chest pain', '141101208', 'ccom'); 
    LoadMarker(parseFloat(45.266375649134),parseFloat(-122.676613858032), 'hemorrhage', '141101206', 'ccom'); 
    LoadMarker(parseFloat(45.0866856873256),parseFloat(-122.667733219612), '*m82', '141101198', 'ccom'); 
    resizeIncidentScrollBar('#ccom-incidents'); 
    updateMarkers(); 
    Sys.Application.initialize(); 
     Sys.Application.add_init(function() { 
      $create(Sys.UI._Timer, {"enabled":true,"interval":2000,"uniqueID":"tmrIncidents"}, null, null, $get("tmrIncidents")); 
    }); 
//]]> 
</script> 

PHP:

<?php 

include 'simple_html_dom.php'; 

// Get WCCCA's html file 
$html = file_get_html('http://www.wccca.com/PITSv2/'); 
$node = $html->find('script[type=text/javascript]', 4); 

$DOMelement = array("LoadMarker(parseFloat(45.5364416896354),parseFloat(-122.959525248125)"); 
preg_match_all('/\d+(\.\d+)?/', $DOMelement[0], $matches); 
print_r($matches[0]); 

?> 
+0

Что именно не работает? –

+0

Просто пытаюсь выяснить, чтобы извлечь координаты. –

+0

Hes спрашивает, как извлечь цензуру 45.5367 и -122.95596 с помощью парсера PHP DOM. Это возможно, используя preg match. http://stackoverflow.com/questions/19471285/find-text-inside-javascript-tag-using-php-simple-html-dom-parser – KyleK

ответ

0

Попробуйте использовать preg_match

preg_match ($pattern, $DOMelement, $matches); 

шаблон искать поплавков/координат.

'/\d+(\.\d+)?/' 

Так в основном, как этот

// Simulation of your DOM element 
$DOMelement = array("LoadMarker(parseFloat(45.5364416896354),parseFloat(-122.959525248125)"); 
preg_match_all('/\d+(\.\d+)?/', $DOMelement[0], $matches); 

returns 

[0] => Array 
    (
     [0] => 45.5364416896354 
     [1] => 122.959525248125 
    ) 

пример здесь ...

http://sandbox.onlinephpfunctions.com/code/d026735963c62fc532d3d6442dfdebc14ca580b1

Хотя он также будет найти десятичные, эти поплавки. Что не идеально. Но значения, которые вы хотите, будут в первом индексе. Как вы можете видеть в примере ссылку

На основе вашего обновления ...

Если скрипт находится в том же месте на странице все время

$html = file_get_html('http://www.wccca.com/PITSv2/'); 
$node = $html->find('script', 0); 
preg_match_all('/\d+(\.\d+)?/', $node->nodeValue;, $matches); 
+0

Я понимаю, как это сделать, пересечение элементов DOM, чтобы найти текст« LoadMarker ... »в первую очередь. –

+0

Являются ли они не только внутри элемента scriptS? – KyleK

+0

@Jon Вы должны попытаться быть более конкретными в своем вопросе. Пожалуйста, добавьте код, чтобы показать нам, что вы сделали до сих пор. Угадайте свою проблему, когда у нас нет кода, это пустая трата времени (для вас тоже). –

1

Try следовал регулярное_выражение:

preg_match_all(/parseFloat\(([^\)]+)/, $js, $matches); 
print_r($matches[1]); 
+0

Это возвращает $ matches [0] = parseFloat ($ matches [1] = 4. http://sandbox.onlinephpfunctions.com/code/6d0cff74533b93d41129ad1e2172530314b8e4ef – KyleK

+0

спасибо, добавлено забытое '+', и вы используете 'preg_match' в своей скрипке вместо 'preg_match_all' в моем ответе –