假设以下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>
不起作用?
答案 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查询速度。