Oracle操作XML各种场景介绍(3)

三 如何解析XML内容:

1、XPath结构介绍:

/      表示树根。例如:/PO 指向树根的子节点<PO>; 通常也作为路径分隔符使用,例如:/A/B

//  表示当前节点下所有子节点;例如:/A//B 匹配A节点下所有B节点

*      作为通配符使用,匹配所有子节点; 如:/A/*/C 匹配A节点下所有子节点C

[ ]      表示预期表达式;XPath支持丰富的操作符如OR、AND、NOT等;例如:/PO[PONO=20 AND PNAME="PO_2"]/SHIPADDR 匹配所有订单号为20并且订单名为PO_2的送货地址

@ 用来提取节点属性

FunctionsXPath支持一些内置函数如:substring(), round() 和 not().

2、使用XMLTYPE方法查询XML:

SELECT x.OBJECT_VALUE.getCLOBVal() FROM xml_table x;

SELECT x.OBJECT_VALUE.getSTRINGVal() FROM xml_table x;

3、使用函数解析XML:

--existsNode 判断XPath中节点是否存在,存在返回值1 不存在返回0;

SELECT existsNode(OBJECT_VALUE, '/PurchaseOrder/Reference')
FROM purchaseorder;

--extractValue  提取XPath节点值

SELECT extractValue(OBJECT_VALUE, '/PurchaseOrder/Reference')
FROM purchaseorder
WHERE existsNode(OBJECT_VALUE, '/PurchaseOrder/Reference') = 1;

--extract  提取XPath节点

SELECT extract(OBJECT_VALUE, '/PurchaseOrder/Reference') "REFERENCE"
FROM purchaseorder;

4、使用SQL解析XML:

SELECT extractValue(OBJECT_VALUE, '/PurchaseOrder/Reference') REFERENCE,
    extractValue(OBJECT_VALUE, '/PurchaseOrder/*//User') USERID,
    CASE
        WHEN existsNode(OBJECT_VALUE, '/PurchaseOrder/Reject') = 1
        THEN 'Rejected'
        ELSE 'Accepted'
    END "STATUS",
extractValue(OBJECT_VALUE, '//CostCenter') CostCenter
FROM purchaseorder
WHERE existsNode(OBJECT_VALUE,'//Reject') = 1;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9c44d2634015d621cecee280150a40ac.html