Запрос файлов XML с использованием BaseX - PullRequest
3 голосов
/ 31 марта 2012

Я использую базу XML BaseX для запросов файлов XML. Я использую файл BaseXClient.java, представленный в документации BaseX. Я запускаю сервер basex и подключаюсь к серверу с помощью BaseXClient.java.

// 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 информация.

<?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>

Если я не передам xmlns в XML-файле экземпляра (juicers.xml), он вернет мне правильные результаты. Но если xmlns включен в файл экземпляра XML, выдается следующее исключение.

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)

Как запросить файлы экземпляров XML с помощью xmlns? Есть ли выход? Есть ли другой способ запустить xquery из Java?

Ответы [ 2 ]

3 голосов
/ 01 апреля 2012

В дополнение к ответу Chrstian вам нужно либо объявить пространство имен элемента по умолчанию, либо использовать пространство имен каждый раз, когда вы обращаетесь к элементу (вы, вероятно, захотите сделать это, если в вашем документе будет несколько пространств имен).

Пространство имен элемента по умолчанию позволяет вам написать запрос, как вы делали это выше:

declare default element namespace "http://www.juicers.org";
doc('xmlfiles/juicers.xml')//image

Если вы не хотите использовать соковыжималки в качестве пространства имен элемента по умолчанию, объявите его как пространство имен и обратитесь к нему по элементу.уровень:

declare namespace juicers="http://www.juicers.org";
doc('xmlfiles/juicers.xml')//juicers:image

Вы можете установить идентификатор пространства имен juicers произвольно.

1 голос
/ 01 апреля 2012

Вам необходимо добавить префикс запроса к команде XQUERY:

System.out.println(session.execute("XQUERY " + query));

Другой вариант - создать экземпляр «Query» и после этого вызвать query.execute():

BaseXClient.Query query = session.query(query);
System.out.println(query.execute())
...