Oracle - Berkeley DB XML Java API - XML 查询以获取多个级别的属性值

Posted

技术标签:

【中文标题】Oracle - Berkeley DB XML Java API - XML 查询以获取多个级别的属性值【英文标题】:Oracle - Berkeley DB XML Java API - XML query to get attribute values at multiple level 【发布时间】:2011-04-03 15:27:52 【问题描述】:

使用 Java API 评估 Berkeley DB。以下是我的测试 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 数据库)

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

我希望能够在此查询返回结果时获取各个服务器名称。怎样才能做到这一点?此查询只会依次返回所有应用程序和状态值。

【问题讨论】:

好问题,+1。有关完整且简短的单行 XPath 2.0 表达式 - 解决方案,请参阅我的答案。 :) 【参考方案1】:

使用

(
  /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) 类型的表达式

【讨论】:

感谢您提供准确、快速的答复。

以上是关于Oracle - Berkeley DB XML Java API - XML 查询以获取多个级别的属性值的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用 oracle berkeley db java edition 的 c 实现(python bsddb)创建的 bdb(berkeley db)文件吗?

如何将多个文档放入 Berkeley-DB XML 容器?

您能否提出使用 Berkeley DB XML 的案例

如何修复 Berkeley DB 文件中不正确的 XML 标签

应该在没有磁盘容器的情况下使用 Berkeley DB XML?

Berkeley XML DB "where" 类比