开发者

xQuery local-name vs xPath with html

assuming the followin开发者_如何学Cg html (minus the comments and "nbsp;" etc that xQuery wont process as is) why does this following code work

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

and this

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

not work?


Because index.html is XHTML and the <head> you are looking for is in the XHTML namespace.

The first query ignores namespaces because you use the local-name() function.

The second query does not, it explicitly asks for a <head> that is in the empty namespace.

You would need

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>

Note that I avoid using //, since this goes through the entire tree of the document, even though in this case the only possible position of the <head> is known beforehand. Making it explicit speeds up the XPath query a lot.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜