2010-07-25 40 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]>不是实际标签的一部分。这是字符数据。