如何在oracle中使用XMLTYPE解析模式

时间:2017-01-22 07:32:56

标签: xml oracle xsd xmltype

我正在尝试创建一个流程,该流程将检查生产中我们在XML Schema中所做的更改是否已部署。这些文件保存在Oracle DB中,因此我考虑使用XMLTYPE.extract ....

问题是xpath在解析模式时遇到了问题。

如果这是我的架构

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="TRB_TRX">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="HEADER">
                <xs:complexType>
                    <xs:attribute name="ReqNotf" type="xs:string" use="optional" default="N"/>

我希望能够

SELECT XMLTYPE(COLUMN).EXTRACT('//xs:attribute[@name="ReqNotf"]/@type').getStringVal() 
From .....

1 个答案:

答案 0 :(得分:0)

尝试类似

的内容
 EXTRACT(col,'//xs:attribute[@name="ReqNotf"]/@type', 
  'xmlns:xs="http://www.w3.org/2001/XMLSchema"').getStringVal() as val

实施例

SELECT EXTRACT(col,'//xs:attribute[@name="ReqNotf"]/@type', 'xmlns:xs="http://www.w3.org/2001/XMLSchema"').getStringVal() as val
From (
select 
XMLTYPE('<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="TRB_TRX">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="HEADER">
                <xs:complexType>
                    <xs:attribute name="ReqNotf" type="xs:string" use="optional" default="N"/>
                </xs:complexType> 
           </xs:element>  
        </xs:sequence>           
    </xs:complexType>
</xs:element>
</xs:schema>') as COL from dual
);

 VAL 
-------------
xs:string 

请勿使用COLUMN作为其保留的列名。

另外考虑使用XMLTABLE - EXTRACT是deprecated