2011-12-07 4 views
0

PHP regex/PHP DOM/PHP XPathの質問です。*いくつかのインラインCSSを削除するにはどうすればよいですか?

<p style='text-indent: 22px; font-weight: bold; line-height: 1em; color: #FFF'> 

どのように私は、「行の高さ」と「色」のCSSプロパティを削除するには、手つかずのテキストインデントとフォントの太さを残して、その結果:インラインCSSと、次のHTMLを考えると

HTMLは次のとおりです。

<p style='text-indent: 22px; font-weight: bold;'> 

HTMLファイルは任意のタグに適用されたタグと他の属性の様々な営巣して、潜在的に数百行である可能性があります。

$elements = $xPath->query('//*[@style="color"]'); 
foreach ($elements as $element) { 
    //remove style='color' 
} 
:私の現在の考え方は、これらの線に沿って何かを使用していた - 「スタイル」属性は、私はPHPのDOMや正規表現の両方を使用してのアプローチがあります知っています <p>

以外のタグに適用することができることを

注意

感謝

EDIT

はここに私のゾルですution:

https://github.com/sabberworm/PHP-CSS-Parser

作成するには:

$dom = new DOMDocument; 
@$dom->loadHTML('<?xml encoding="UTF-8">' . $html); 
$xPath = new DOMXPath($dom); 
$elements = $xPath->query('//p|//span'); 
foreach($elements as $element){ 
    $oParser = new CSSParser("p{" . $element->getAttribute('style') . "}"); 
    $oCss = $oParser->parse(); 
    foreach($oCss->getAllRuleSets() as $oRuleSet) { 
     $oRuleSet->removeRule('line-'); 
     $oRuleSet->removeRule('margin-'); 
     $oRuleSet->removeRule('font-'); 
    } 
    $css = $oCss->__toString(); 
    $css = substr_replace($css, '', 0, 3); 
    $css = substr_replace($css, '', -1, 1); 
    $element->setAttribute('style', $css); 
} 
$src = $dom->saveHTML(); 

答えて

3

を間違いなくむしろ正規表現よりも、適切なHTMLとCSSパーサを使用しています。 XPathクエリの場合は、変更するノードを見つけるために、contains機能を使用します。

//*[contains(@style, 'color:')] 

は、その後、あなたがしたくないプロパティを削除するためにCSSパーサーを使用しています。

+0

パーフェクト - 私は現在実用的な解決策を持っています – kaese

関連する問題