我需要编辑下面注释标记的内部,以便更改css文件的位置。这需要通过PHP完成。我试过使用下面的代码,但是我得到了无效的表达式错误。
评论部分:

<!--[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';
}

最佳答案

尝试"//comment()"获取所有CommentNodes。
请注意,CommentNode中的link元素不是CommentNode的子节点,而只是数据:

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

09-25 18:06