ORACLE 解析xml字符串-转载的
--------------------------方法一-------------------------------------
1.xml字符串
/*
<orderlist>
<order>
<orderid>1</orderid>
<ordernumber>857544544</ordernumber>
<orderprice>54</orderprice>
</order>
<order>
<orderid>2</orderid>
<ordernumber>858544544</ordernumber>
<orderprice>63</orderprice>
</order>
<order>
<orderid>3</orderid>
<ordernumber>454854555</ordernumber>
<orderprice>781</orderprice>
</order>
</orderlist>
*/
2.oracle存储过程
CREATE OR REPLACE PROCEDURE p_xmlparse (p_xml IN CLOB,
r_cur OUT SYS_REFCURSOR)
AS
/***
xml格式<?xml version="1.0" encoding="utf-8"?>
<material id="101">
<attribute0>value0</attribute0>
<attribute1>value1</attribute1>
<attribute2>value2</attribute2>
</material>
***/
-- xml解析器
xmlpar xmlparser.parser := xmlparser.newparser;
-- dom文档对象
doc xmldom.domdocument;
materialnodes xmldom.domnodelist;
materialid VARCHAR2 (50);
chilnodes xmldom.domnodelist;
tempnode xmldom.domnode;
temparrmap xmldom.domnamednodemap;
-- 以下变量用于获取xml节点的值
v_attribute VARCHAR2 (50);
v_value VARCHAR2 (50);
tmp INTEGER;
l_sql VARCHAR2 (32767) := 'select ';
BEGIN
xmlparser.parseclob (xmlpar, p_xml);
doc := xmlparser.getdocument (xmlpar);
-- 释放解析器实例
xmlparser.freeparser (xmlpar);
materialnodes := xmldom.getelementsbytagname (doc, 'material');
tempnode := xmldom.item (materialnodes, 0);
-- 获取根元素的ID属性值
materialid := xmldom.getattribute (xmldom.getdocumentelement (doc), 'id');
-- 所有属性
temparrmap := xmldom.getattributes (tempnode);
-- 获取子元素的值
chilnodes := xmldom.getchildnodes (tempnode);
tmp := xmldom.getlength (chilnodes);
l_sql := l_sql || materialid || ' as materialid';
FOR i IN 0 .. tmp - 1
LOOP
v_attribute := xmldom.getnodename (xmldom.item (chilnodes, i));
v_value :=
xmldom.getnodevalue (
xmldom.getfirstchild (xmldom.item (chilnodes, i)));
l_sql := l_sql || ',''' || v_value || ''' as ' || v_attribute;
-- dbms_output.put_line(materialid||' '||v_attribute||' '||v_value);
END LOOP;
l_sql := l_sql || ' from dual';
-- DBMS_OUTPUT.put_line (l_sql);
OPEN r_cur FOR l_sql;
-- 释放文档对象
xmldom.freedocument (doc);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (SQLERRM);
END p_xmlparse;
3.执行结果
源文档地址:http://blog.csdn.net/wzy0623/article/details/8245062
--------------------------方法二-------------------------------------
SELECT * FROM XMLTABLE('$B/DEAL_BASIC/USER_DEAL_INFO' PASSING
XMLTYPE('<?xml version="1.0" encoding="gb2312" ?>&xml') AS B
COLUMNS USER_DEAL_ID VARCHAR2(50) PATH
'/USER_DEAL_INFO/USER_DEAL_ID',
DEAL_INURE_TIME VARCHAR2(50) PATH
'/USER_DEAL_INFO/DEAL_INURE_TIME',
DEAL_EXPIRE_TIME VARCHAR2(50) PATH
'/USER_DEAL_INFO/DEAL_EXPIRE_TIME',
DEAL_CREATE_TIME VARCHAR2(50) PATH
'/USER_DEAL_INFO/DEAL_CREATE_TIME')
xml字符串以传入参数的方式 输入
<DEAL_BASIC>
<USER_DEAL_INFO>
<USER_DEAL_ID>1000100001</USER_DEAL_ID>
<DEAL_INURE_TIME>20081130</DEAL_INURE_TIME>
<DEAL_EXPIRE_TIME>30000101</DEAL_EXPIRE_TIME>
<DEAL_CREATE_TIME>20081130</DEAL_CREATE_TIME>
</USER_DEAL_INFO>
<USER_DEAL_INFO>
<USER_DEAL_ID>1000100002</USER_DEAL_ID>
<DEAL_INURE_TIME>20081131</DEAL_INURE_TIME>
<DEAL_EXPIRE_TIME>30000102</DEAL_EXPIRE_TIME>
<DEAL_CREATE_TIME>20081131</DEAL_CREATE_TIME>
</USER_DEAL_INFO>
<USER_DEAL_INFO>
<USER_DEAL_ID>1000100002</USER_DEAL_ID>
<DEAL_INURE_TIME>20081131</DEAL_INURE_TIME>
<DEAL_EXPIRE_TIME>30000102</DEAL_EXPIRE_TIME>
<DEAL_CREATE_TIME>20081131</DEAL_CREATE_TIME>
</USER_DEAL_INFO>
</DEAL_BASIC>
输出结果
ORACLE 解析xml字符串-转载的的更多相关文章
- oracle解析xml完成版第二次修改
其实XML字符串就好像是ORACLE中的外部表,因此Oracle对 解析XML字符串一些规则要求非常严格.XML字符串提供的数据就是一张表,所以Oracle必须提供跟 xml数据一致的列头 示例一 S ...
- tinyXml直接解析XML字符串
一直都用tinyxml直接LoadFile来解析XML,发现原来也可以直接解析XML字符串. XML文件: <?xml version=\"1.0\" encoding=\& ...
- Oracle解析 xml 记录一下(未完待续)
Oracle解析 xml 记录一下. SQL> desc xmlparser; PROCEDURE FREEPARSER Argument Name Type ...
- 解析xml字符串时报“前言中不允许有内容”错误。
一,问题出现经过: j基于java语言webservic服务端接收客户端 传来的xml字符串用 解析时总报:org.dom4j.DocumentException: Error on line 1 o ...
- dom4j解析xml字符串实例
DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml ...
- java解析xml字符串(用dom4j)
package com.smsServer.Dhst; import java.util.HashMap; import java.util.Iterator; import java.util.Ma ...
- java解析xml字符串为实体(dom4j解析)
package com.smsServer.Dhst; import java.util.HashMap; import java.util.Iterator; import java.util.Ma ...
- .NET解析xml字符串,通过反射给实体类对象赋值,获取实体类数据列表
/// <summary> /// 解析xml字符串 转换为实体类列表数据 /// </summary> /// <param name="xmlStr&quo ...
- C++解析XML字符串
项目交互遇到了需要VC++中解析XML字符串,故花了点时间了解了下VC++中解析XML的诸多方法主要包括三种:msxml(微软提供).markup.TinyXml. 开始花了点时间使用msxml3,虽 ...
随机推荐
- JS实现点击按钮,自增输入框个数
<html> <head> <script language="javascript"> var i=0; function addinput( ...
- Spring的OpenEntityManagerInViewFilter
在Java Web项目中使用Hibernate经常会遇到LazyInitializationException .这是因为controller和model层(java代码)将通过JPA的一些启用了延迟 ...
- Gvim一些基本配置
介绍一些关于Gvim(windows 7 32位 Vim 7.4)的基本配置,除了特别说明,代码一律添加在安装目录下的_vimrc文件中. 1.取消自动备份,这行代码需要添加在 _vimrc文件中的b ...
- ZKW费用流修正
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #inc ...
- POJ 3694 Network(无向图求桥+重边处理+LCA)
题目大意: 给你一个无向图,然后再给你一个Q代表有Q次询问,每一次加一条边之后还有几座桥.在这里要对重边进行处理. 每次加入一条边之后,在这条搜索树上两个点的公共祖先都上所有点的桥都没了. 这里重边的 ...
- 主席树:POJ2104 K-th Number (主席树模板题)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 44952 Accepted: 14951 Ca ...
- 【拓扑】【宽搜】CSU 1084 有向无环图 (2016湖南省第十二届大学生计算机程序设计竞赛)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1804 题目大意: 一个有向无环图(DAG),有N个点M条有向边(N,M<=105 ...
- #345 div2 D. Image Preview
Vasya's telephone contains n photos. Photo number 1 is currently opened on the phone. It is allowed ...
- C#序列化和反序列化
序列化和反序列化 序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得. 序列化分为两大部分:序列化和反序列化.序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在 ...
- Java内存管理以及各个内存区域详解
一.概述 原文链接:http://blog.csdn.net/l271640625/article/details/39761439 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若 ...