2010-07-25 68 views
2

我需要編輯以下注釋標記的內部,以便我可以更改css文件的位置。這需要通過PHP完成。我曾嘗試使用下面的代碼,但我得到無效的表達式錯誤。使用php查找和編輯html的註釋元素

註釋部分:

<!--[if IE 6]><link rel="stylesheet" type="text/css" href="/Css/IE6.css" media="screen" /><![endif]--> 

碼不起作用:

$csslist = $xpath->query("//<!--[if IE 6]>");  
foreach($csslist as $css) {     
    $css->innertext = 'test'; 
} 

回答

4

嘗試"//comment()"讓所有CommentNodes。

注意的是,在CommentNode鏈接元素不是commentNode而僅僅是數據的childNode:

libxml_use_internal_errors(TRUE); 
$dom = new DOMDocument; 
$dom->loadHTMLFile('http://www.nytimes.com/'); 
libxml_clear_errors(); 

$xpath = new DOMXPath($dom); 
foreach($xpath->query('//comment()[contains(., "link")]') as $node) 
{ 
    var_dump($node->data); 
} 

這將給:

string(135) "[if IE]> 
    <link rel="stylesheet" type="text/css" href="http://graphics8.nytimes.com/css/0.1/screen/build/homepage/ie.css"> 
<![endif]" 

string(138) "[if IE 6]> 
    <link rel="stylesheet" type="text/css" href="http://graphics8.nytimes.com/css/0.1/screen/build/homepage/ie6.css"> 
<![endif]" 

正如你所看到的,實際的註釋節點只是<!---->部分。其餘的只是文字。 [if IE]>不是實際標籤的一部分。這是字符數據。