web-dev-qa-db-ja.com

php domはノードのすべての属性を取得します

ノードにその属性があるかどうかを確認せずにノードのすべての属性を取得する簡単な方法はありますか?短い、ここに私がやろうとしていることの例があります:私はこの短いdomdocumentを持っています:

<p align=center style="font-size: 12px;">some text</p>
<a href="#" target="_blank">some link<a/>

さて、getAttribute( 'align')でpタグをチェックすると、中央の値が取得されます。これは素晴らしいことですが、可能な限りすべての属性をチェックせずに、pタグにもスタイルのような別の属性があるかどうかを確認したいです。 imgタグでは、src、width、height、style、onclickなどをチェックして、それらが存在するかどうかを確認する必要があります。しかし、すべての属性を表示するより簡単な方法だと思います。

37
alin

ノードがDOMElementまたはDOMNodeであると考えると、 DOMNode$ attributes プロパティを使用できます。 class:ノードが持つ属性のリストが含まれます。

そのプロパティを使用して、$nodeNameプロパティと$nodeValueプロパティを使用して、属性をループし、それぞれの名前と値を取得できます。


たとえば、あなたの場合、次のようなものを使用できます。

$str = <<<STR
<p align=center style="font-size: 12px;">some text</p>
<a href="#" target="_blank">some link<a/>
STR;

$dom = new DOMDocument();
$dom->loadHTML($str);

$p = $dom->getElementsByTagName('p')->item(0);
if ($p->hasAttributes()) {
  foreach ($p->attributes as $attr) {
    $name = $attr->nodeName;
    $value = $attr->nodeValue;
    echo "Attribute '$name' :: '$value'<br />";
  }
}


次のような出力が得られます:

Attribute 'align' :: 'center'
Attribute 'style' :: 'font-size: 12px;'

つまり、ノードの2つの属性がありますが、それらの名前は以前はわかりませんでした。そして、各属性について、その名前と値を取得できます。

65
Pascal MARTIN