Получить ширину и высоту атрибута каждого элемента через DOM или XPATH - PullRequest
2 голосов
/ 13 ноября 2011

Как я могу получить ширину и высоту атрибута каждого элемента?

Например,

$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. выберите div с именем класса item.
  2. get 295 (ширина) и 210 (высота).

Возможно ли это с DOM? Или XPATH?

EDIT:

Кажется, мне сейчас удается выбрать div с именем класса,

$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);
}

Теперь это то, что я хочу только,

get 295 (ширина) и 210 (высота).

Ответы [ 2 ]

1 голос
/ 07 декабря 2017
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');

1 голос
/ 13 ноября 2011

Если вы не хотите использовать регулярные выражения, вы можете использовать простые строковые функции, чтобы извлечь то, что вам нужно. Вот пример, который, скорее всего, можно улучшить.

$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))) . '"';

Конечно, вы можете заменить переменные $width и $height их строковыми литералами и удалить вызовы strlen(), поскольку они будут постоянными целыми числами.

Демо

...