Xquery不使用命名空间

时间:2012-12-03 11:34:02

标签: xml namespaces xquery

我是xQuery的初学者,我正在尝试在XML文件中列出根节点的所有子类。但是,XML文档中的根节点具有在其中定义的名称空间,这意味着我的xQuery在引用时不起作用。

for doc(“/ db / books.xml”)/ bookstore / book中的$ x   返回$ x 不会返回任何带有书店标签

中定义的名称空间的内容

当我从标记中删除命名空间时,查询工作正常。

有没有办法在不删除XML文件中的命名空间的情况下解决这个问题?

编辑:我最终将在名称空间差别很大的数百个XML文件上执行这些查询

提前谢谢

2 个答案:

答案 0 :(得分:0)

你在查询中声明了你的命名空间吗? 喜欢:

declare namespace ns = "http://example.org";

然后在查询中使用它:

for $x in doc("/db/books.xml")/ns:bookstore/ns:book return $x

答案 1 :(得分:0)

如果你更懒惰(并且可以确保避免像<a:foo /> vs <b:foo />这样的名称冲突),你甚至可能想要使用:

for $x in doc("/db/books.xml")/*:bookstore/*:book return $x 其中*将匹配任何给定的命名空间(甚至是“无命名空间”)