2

各要素の属性の幅と高さを取得するにはどうすればよいですか?

例えば、

$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クラス名がitemonlyの を選択します。
  2. 295(幅) と210(高さ) のみを取得します。

DOMで可能ですか?またはXPATH?

編集:

クラス名で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);
}

今、これは私が求めているものです。

295(幅) と210(高さ)を取得します。

4

3 に答える 3

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

もちろん、$widthおよび$height変数を文字列リテラルに置き換えて、 の呼び出しをstrlen()定数整数として削除することができます。

デモ

于 2011-11-13T16:03:18.523 に答える
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;}

この関数を使用してwidthheightまたは他のスタイル値を取得できます。次のように呼び出すだけです。

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

于 2017-12-07T18:00:27.407 に答える