0

我有这个规范的结构:

<xsd:complexType name="Document">
    <xsd:attribute name="ID" use="optional" type="cdpscm:IDDocument"/>
</xsd:complexType>

<xsd:element name="NationalID" type="cdpscm:NationalID"/>
<xsd:complexType name="NationalID">
    <xsd:complexContent>
        <xsd:extension base="cdpscm:Document">
            <xsd:sequence>
                <xsd:element name="Number"/>
            </xsd:sequence>
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>

<xsd:element name="Passaport" type="cdpscm:Passaport"/>
<xsd:complexType name="Passaport">
    <xsd:complexContent>
        <xsd:extension base="cdpscm:Document">
            <xsd:sequence>
                <xsd:element name="Number"/>
            </xsd:sequence>
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>

如果文档是 Passaport 或 NationalID,谁调用我的 OSB 服务将进行转换,但我如何获取数字值以传递给另一个服务,例如,如果我只有 Document 元素类型而没有 number 元素。

这是假定的输入:

<v24:Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="v2:TouristPerson" ID="5772893">
   <v2:Documents>
      <v2:Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="v2:Passport">
          <v2:Number>03070</v2:Number>
     </v2:Document>
   </v2:Documents>
</v24:Person>

真正的结构比这更复杂,所以可能需要知道我是在使用 NationalID 还是 Passaport、Tourist 还是 Native Person。

使用 Oracle 11g、Eclipse OEPE。

谢谢您的帮助!

4

1 回答 1

1

像这样的东西应该工作。

declare namespace xsi = "http://www.w3.org/2001/XMLSchema-instance";

let $documents := $body//v24:Person/v2:Documents/v2:Document

for $passport in $documents[@xsi:type="v2:Passport"]
  return data($passport/v2:Number)

  (: similarly for national IDs :)
于 2016-10-20T05:10:41.783 回答