我是xQuery的初学者,我正在尝试在XML文件中列出根节点的所有子类。但是,XML文档中的根节点具有在其中定义的名称空间,这意味着我的xQuery在引用时不起作用。
for doc(“/ db / books.xml”)/ bookstore / book中的$ x 返回$ x 不会返回任何带有书店标签
中定义的名称空间的内容当我从标记中删除命名空间时,查询工作正常。
有没有办法在不删除XML文件中的命名空间的情况下解决这个问题?
编辑:我最终将在名称空间差别很大的数百个XML文件上执行这些查询
提前谢谢
答案 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
其中*
将匹配任何给定的命名空间(甚至是“无命名空间”)