Как удалить атрибут стиля только с DOMXPATH? - PullRequest
2 голосов
/ 27 марта 2012

Я использую DOMXPATH, чтобы удалить все attributes из тега p, и он отлично работает,

// Loop all p.
foreach( $dom->getElementsByTagName( "p" ) as $p )
{
    // Loop all attributes in p.
    foreach( $p->attributes as $attrib )
    {
          // Remove all attribute   from p. 
          $p->removeAttributeNode( $attrib );
    }

}

А теперь я хочу удалить стиль attribute только из тега p.

// Loop all p.
foreach( $dom->getElementsByTagName( "p" ) as $p )
{
    // Loop all attributes in p.
    foreach( $p->attributes as $attrib )
    {
          // Remove only the style attribute
      $p->removeAttributeNode( $p->getAttributeNode( "style" ) );
    }

}

Но в ответ я получаю эту ошибку,

Исправляемая фатальная ошибка: аргумент 1 передан в DOMElement :: removeAttributeNode ()должен быть экземпляром DOMAttr, логическое значение.

Как удалить только style attribute?

1 Ответ

3 голосов
/ 27 марта 2012

замените

// Loop all attributes in p.
foreach( $p->attributes as $attrib )
{
      // Remove only the style attribute
  $p->removeAttributeNode( $p->getAttributeNode( "style" ) );
}

на что-то вроде этого:

// fetch style node
$sNode = $p->getAttributeNode( "style" )
// only procede, if $p actually has a style node
if ($sNode) {
  $p->removeAttributeNode( $sNode );
}

(не проверено, извините, у меня не установлен сервер)

...