【发布时间】:2012-09-08 09:09:46
【问题描述】:
目前我正在努力进行客户端 xpath 评估。出于开发目的,我添加了:
<?php header( 'Content-type: application/xhtml+xml' ); ?>
如果我生成无效 (x)html,则转到我的页面顶部以获取解析错误。我想使用此代码进行一些 xpath 查询,例如 //div 或 //div[@class='test'] 等:
function xpath( query ){
var evaluater = new XPathEvaluator();
var resolver = document.createNSResolver( document.documentElement );
var iterator = evaluater.evaluate( query, document, resolver, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );
var nodes = [];
var result;
while( ( result = iterator.iterateNext() ) != null ){
nodes.push( result );
}
return nodes;
};
我的页面顶部是这样的:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
如果 header(...) 方法被注释掉,它可以正常工作,但如果它被触发,xpath 查询不会返回任何结果。
这是为什么?标头在 xpath 评估中起什么作用?
编辑:
如果我从 html 元素中删除 xmlns 并切换 header - 方法,则会出现:
【问题讨论】:
-
可以贴出原版的html吗?
-
恕我直言,因为从命名空间
xmlns='http://www.w3.org/1999/xhtml',可以推断返回数据的内容类型,这就是为什么不需要显式设置内容类型的原因。此外,元标记为内容类型添加相应的响应标头。
标签: javascript xpath content-type