首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BaseX查询XML文件

使用BaseX查询XML文件
EN

Stack Overflow用户
提问于 2012-04-01 03:53:33
回答 2查看 6.2K关注 0票数 5

我正在使用BaseX原生XML数据库来查询XML文件。我使用的是BaseX文档中提供的BaseXClient.java文件。我正在启动basex服务器,并使用BaseXClient.java连接到服务器。

代码语言:javascript
复制
// create session
final BaseXClient session = new BaseXClient("localhost", 1984, "admin", "admin");

String query = "doc('xmlfiles/juicers.xml')//image";
// version 1: perform command and print returned string
System.out.println(session.execute(query));

现在,juicers.xml文件包含了xmlns信息。

代码语言:javascript
复制
<?xml version="1.0"?>
<juicers
xmlns="http://www.juicers.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.juicers.org 
                    juicers.xsd">

<juicer>
    <name>OJ Home Juicer</name>
    <image>images\mighty_oj.gif</image>
    <description>There&apos;s just no substitute for a properly squeezed
        orange in the morning. So delicate and refreshing. The finest hotels
        use mechanical juicers of this type for their most discriminating
        guests. This is the largest selling juicer of its kind. It&apos;s a
        beautiful little all-metal piece in baked enamel and polished chrome;
        it even won the Frankfurt Fair Award for its design. Uses no
        electricity and produces no non-recyclable waste as do frozen juices.
    </description>
    <warranty>lifetime warranty</warranty>
    <cost>41.95</cost>
    <retailer>http://www.thewhitewhale.com/oj.htm</retailer>
</juicer>
</juicers>

如果我没有在XML实例文件(juicers.xml)中给出xmlns,它会返回正确的结果。但是如果xmlns包含在XML实例文件中,就会抛出以下异常。

代码语言:javascript
复制
java.io.IOException: Stopped at line 1, column 3:
Expecting command.
at org.basex.api.BaseXClient.execute(BaseXClient.java:73)
at org.basex.api.BaseXClient.execute(BaseXClient.java:84)
at org.basex.api.Example.main(Example.java:31)

如何使用xmlns查询XML实例文件?有没有出路?有没有其他方法可以在Java中运行xquery

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-01 19:54:40

除了Chrstian的回答之外,您还必须声明一个默认的元素名称空间,或者在每次寻址一个元素时使用该名称空间(如果文档中有多个名称空间,则可能需要这样做)。

默认的元素名称空间使您可以像上面一样编写查询:

代码语言:javascript
复制
declare default element namespace "http://www.juicers.org";
doc('xmlfiles/juicers.xml')//image

如果您不想使用juicers作为默认的元素命名空间,请将其声明为命名空间并在元素级别引用它:

代码语言:javascript
复制
declare namespace juicers="http://www.juicers.org";
doc('xmlfiles/juicers.xml')//juicers:image

您可以任意设置命名空间标识符juicers

票数 3
EN

Stack Overflow用户

发布于 2012-04-01 04:26:49

您需要在查询前添加XQUERY命令:

代码语言:javascript
复制
System.out.println(session.execute("XQUERY " + query));

另一种选择是创建一个"Query“实例,然后调用query.execute()

代码语言:javascript
复制
BaseXClient.Query query = session.query(query);
System.out.println(query.execute())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9959159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档