2011-11-13 6 views
2

각 요소의 특성의 너비와 높이를 가져 오는 방법은 무엇입니까? 예를 들어DOM 또는 XPATH를 통해 각 요소 특성의 너비와 높이 가져 오기

,

$dom = new DOMDocument; 
$dom->loadHTML('<div class="item" style="width:295px; height:210px; border:1px solid #000;"></div><div></div>'); 

foreach($dom->getElementsByTagName('div') as $node) 
{ 
    $style = $node->getAttribute('style'); 

    var_dump($style); 
} 

결과,

string 'width:295px; height:210px; border:1px solid #000;' (length=49) 
string '' (length=0) 

그러나이 내가 후 나는 무엇인가,

  1. item의 클래스 이름을 가지고 div을 선택합니다.
  2. 295 (너비) 및 210 (높이) 만 입력하십시오.

DOM을 사용할 수 있습니까? 또는 XPATH?

편집 : 지금 클래스 명으로 사업부를 선택하기 위해 관리하는 것

,

$dom = new DOMDocument; 
$dom->loadHTML('<div class="item" style="width:295px; height:210px; border:1px solid #000;"></div><div></div>'); 

$xpath = new DOMXpath($dom); 

foreach ($xpath->query('//*[@class="item"]') as $node) { 

    $style = $node->getAttribute('style'); 

    var_dump($style); 
} 

지금이 난 후에 나는 무엇인가,

295 (폭)를 얻을 및 210 (높이).

+0

http://stackoverflow.com/questions/3448005/ xpath-and-xquery/implemented-condition-in-xquery/3448050 # 3448050은 특정 클래스 속성으로 div를 잡는 XPath에 대한 부분에 대답 할 것입니다. 인라인 스타일을 분리하려면 일반 문자열 함수 또는 CSS 파서가 필요합니다. 이것은 DOM의 도메인이 아닙니다. – Gordon

+2

http://stackoverflow.com/questions/4432334/parse-inline-css-values-with-regex는 항목의 class 속성을 사용하여 div의 스타일 속성을 가져 오기 위해 sidenote에서 정규식 – Gordon

+1

으로 인라인 스타일을 구문 분석하는 방법에 대한 답변을 제공합니다. 당신은 또한'/ div [@ class = "item"]/@ style'을 할 수 있습니다. 그러면 DOMAttr이 반환됩니다. – Gordon

답변

1

정규식을 사용하지 않으려면 간단한 문자열 함수를 사용하여 필요한 것을 추출 할 수 있습니다. 다음은 예제입니다. 개선 될 가능성이 큽니다. 그들은 일정한 정수 것 같은

$width = 'width:'; $height = 'height:'; 
// Adding whitespace will not affect the result 
$str = ' width: 295 px; height: 210 px; border:1px solid #000;'; 

$width_str = strstr($str, $width); 
echo 'Width: "' . trim(substr($width_str, strlen($width), stripos($width_str, 'px;') - strlen($width))) . '"'; 

echo "\n"; 

$height_str = strstr($str, $height); 
echo 'Height: "' . trim(substr($height_str, strlen($height), stripos($height_str, 'px;') - strlen($height))) . '"'; 

은 물론, 당신은 strlen()에 전화를 자신의 문자열 리터럴로 $width$height 변수를 교체하고 제거 할 수 있습니다.

Demo

+0

답변 해 주셔서 감사합니다, Nick! :-) – laukok

1
function GetStyleValue($style, $type){ 
$value = false; 
$all = explode(';',$style); 
foreach($all as $part){ 
    $temp = explode(':', $part); 
    if(trim($temp[0]) == $type){ 
     $value = (int)trim($temp[1]); 
    }  
} 
return $value;} 
당신은 width, height 또는 다른 스타일의 값을 얻기 위해이 기능을 사용할 수 있습니다

, 그냥 전화 :

$width = GetStyleValue($img->getAttribute("style"), 'width');