2017-01-05 2 views
1

Я использую PHP Dom Document для чтения элементов HTML Dom из файла.Как найти свойство стиля элемента Dom с помощью Dom Document в PHP?

$html = file_get_contents(public_path() . 'content.html'); 
    $dom = new \DOMDocument(); 
    $dom->loadHTML($html); 
    var_dump($dom->getElementById('panel_header')); 

я могу целевой элемент его ID и прочитать содержимое элемента и многое другое.

Но я не могу найти его свойства стиля.

Потому что мне нужно клонировать его или изменять с новыми параметрами.

Как прочитать его свойства и изменить его стиль?

Возможно ли это?

Любые другие решения?

+0

Вы можете прочитать атрибут стиля элемента, если он установлен, конечно. Но правила таблицы стилей отделены от них, они не являются частью DOM. – arkascha

+1

попробуйте $ node-> getAttribute ('style'), он даст значение свойства style –

+0

ОК, но как я могу обновить это свойство, я фильтрую строку для извлечения данных как «color: rgb (255, 0, 0))». Мне нужно это для «color: rgb (155,10,0)». Как я могу заменить тот же самый дом. –

ответ

3

вы можете попробовать это: Если CSS на той же странице, вы можете попробовать это:

$html = file_get_contents('testing.html'); 
    $dom = new DOMDocument(); 
    $dom->loadHTML($html); 
    $div = $dom->getElementById('test'); 
    if ($div->hasAttributes()) { 
     foreach ($div->attributes as $attr) { 
      $name = $attr->nodeName; 
      $value = $attr->nodeValue; 
      if(strcmp($name,"class") == 0){ 
       $x=getStyle($dom->textContent,".$value{","}"); 
       echo "<pre>"; 
       print_r($x); 
      } 
      if(strcmp($name,"id") == 0){ 
       $idCss=getStyle($dom->textContent,"#$value{","}"); 
       echo "<pre>"; 
       print_r($idCss); 
      } 
     } 
    } 


    function getStyle($string, $start, $end){ 
     $string = ' ' . $string; 
     $ini = strpos($string, $start); 
     if ($ini == 0) return ''; 
     $len = strpos($string, $end, $ini); 
     return substr($string, $ini, $len); 
    } 

обновить стиль, который вы можете использовать.

$div->setAttribute('style', 'background-color:blue;'); 
    echo $dom->saveHTML(); exit;. 

testing.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
</head> 
<body> 
<div id="test" class="stl" style="width:100px;"> 

</div> 
</body> 
</html> 

<style> 
.stl{ 
background-color:green; 
} 

</style> 

выход:

.stl{ 
background-color:green; 
} 

, если вы ищете только стиль, который вы можете сделать это:

$html = file_get_contents('testing.html'); 
     $dom = new DOMDocument(); 
     $dom->loadHTML($html); 
    $div = $dom->getElementById('test'); 
    if ($div->hasAttributes()) { 
     echo $div->getAttribute('style');//width:100px; 
    } 
+1

приятный, но его единственный возвращаемый встроенный css. –

+0

Я думаю, вы можете получить имя класса, но не определенное 'css' внутри. –

+0

@JaydeepPandya попробуйте обновление, посмотрите, полезно ли это. –

2

Парсер DOM позволит вам читать данные, находящиеся в DOM.

Он не будет загружать CSS, применять его к DOM, а затем предоставлять вам доступ к вычисленным свойствам элемента.

Для этого вам нужно использовать другой подход и использовать инструмент, который применяет CSS к DOM. Наиболее распространенными являются Selenium и PhantomJS (PHP bindings) (они также выполняют JavaScript).

+0

Спасибо за вашу поддержку. –

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

  • Нет связанных вопросов^_^