在扩展 xsd 上通过 xquery 获取元素值
Get elements value by xquery on extended xsd
我有这个规范结构:
<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 元素类型而没有有数字元素。
这是假定的输入:
<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,是游客还是本地人。
使用 Oracle 11g、Eclipse OEPE。
感谢您的帮助!
像这样的东西应该有用。
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 :)
我有这个规范结构:
<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 元素类型而没有有数字元素。
这是假定的输入:
<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,是游客还是本地人。
使用 Oracle 11g、Eclipse OEPE。
感谢您的帮助!
像这样的东西应该有用。
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 :)