java - 如何编写跨越 xsd :any element? 的 XQuery

标签 java oracle xquery bpel

模式包含一个 元素。

根据一些外部信息,代码知道在 any 的位置有一个特定的 XML 结构(例如 foo)。

XQuery 将看起来像/Root/Child/AnotherChild/book/title。

但是 XQuery 提示 book 元素未知,因此 XQuery 无效。

我怎样才能编写一个查询,以便 XQuery 可以接受 位置的任何内容都可以在运行时动态匹配?

如果环境很重要,那就是 Java、Oracle BPEL、SOA 服务器 1.1.5。

最佳答案

<xsd:any/>

并不真正匹配“任何”元素 - 相反,它匹配范围内架构中某处声明的任何元素。

例如,以下架构定义了一个包含 xsd:any 的元素:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://www.example.com/">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:any/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

然而,下面的查询将失败:

import schema namespace my = "http://www.example.com/";
validate { <my:root><my:Child/></my:root> }

因为 my:Child 没有声明。

如果schema修改如下:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://www.example.com/">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:any/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Child" type="xs:anyType"/>
</xs:schema>

那么查询应该会成功。当然 xsd:any 匹配的元素可能在另一个命名空间中。

关于java - 如何编写跨越 xsd :any element? 的 XQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7679020/

相关文章:

java - 生成EAR文件时如何在代码中创建application.xml?

xquery - XQuery 中的变量范围?

xml - 如何避免 XQuery 结果重复?

Java服务器将html页面从文件发送到浏览器

java - 在 java 中使用 AudioFormat 播放波形文件

SQL模式匹配

sql - Oracle Insert Select with order by

使用 xquery 比较 XML

java - jhipster 应用程序部署到 Heroku 时出错

java - 截断表表最优解