xQuery local-name vs xPath with html

时间:2010-03-11 15:53:44

标签: html xpath xquery

假设以下html(减去xQuery不会处理的注释和“等等”)为什么以下代码可以正常工作

for $first in fn:doc("file:///index.html")//element()[local-name() = "head"]
    return <test>{ $first }</test>

和这个

for $first in fn:doc("file:///index.html")//head
return 
<test>{ $first }</test>

不起作用?

1 个答案:

答案 0 :(得分:3)

因为index.html是XHTML而您正在寻找的<head>位于XHTML命名空间中。

第一个查询忽略名称空间,因为您使用local-name()函数。

第二个查询没有,它明确要求空名称空间中的<head>

你需要

declare namespace x="http://www.w3.org/1999/xhtml"

for $first in fn:doc("file:///index.html")/x:html/x:head
return <test>{ $first }</test>

请注意,我避免使用//,因为这会遍历文档的整个树,即使在这种情况下,事先知道<head>的唯一可能位置。明确加快XPath查询速度。