Oracle - Berkeley DB XML Java API - запрос XML для получения значений атрибутов на нескольких уровнях - PullRequest
1 голос
/ 03 апреля 2011

Оценка Беркли БД с помощью API Java. Ниже приведены одни из моих тестовых XML-данных:

<master>
    <env name="development">
        <server name="tomcat1" ip="122.122.123.1">
            <domain name="domain1">
                <application name="GreatApplication1" status="enabled"/>
            </domain>
            <domain name="domain2">
                <application name="GreatApplication2" status="enabled"/>
                <application name="NotSoGreatApplication2" status="disabled"/>
                <application name="GreatApplication3" status="enabled"/>
            </domain>
        </server>
    </env>
</master>

Используя следующую строку запроса, я могу запрашивать приложения и их статус на любом «домене» для любого «сервера»: (при условии, что envs.dbxml - это мой Xml db)

collection('envs.dbxml')/master/env[@name=$name]/server/domain/application/@*/string()

Я хочу иметь возможность получать имена отдельных серверов, когда этот запрос возвращает результаты. Как это может быть достигнуто? Этот запрос просто возвращает все приложения и значения состояния одно за другим.

1 Ответ

2 голосов
/ 03 апреля 2011

Используйте

(
  /master/env[@name=$name]/server/@name
 |
  /master/env[@name=$name]/server/domain/application/@*
)
  /string(.)

Или эта более короткая форма :

/master/env[@name=$name]/server/(@name|domain/application/@*)/string(.)

Объяснение : Здесь мы используем оператор XPath | (union) и синтаксис XPath 2.0, который допускает выражения вида: expr/(expr) и выражения вида expr/func(argList)

...