DECLARE
v_xmlclob CLOB := '<?xml version="1.0" encoding="UTF-8"?>
<header ID="1" ADDRESS="BEIJING">
<header_name>test</header_name>
<line>
<line_num>1</line_num>
<name>TEST1</name>
<sex>男</sex>
<detail>
<age>12</age>
</detail>
<detail>
<age>13</age>
</detail>
</line>
<line>
<line_num>2</line_num>
<name>TEST2</name>
<sex>女</sex>
<detail>
<age>14</age>
</detail>
<detail>
<age>15</age>
</detail>
</line>
</header>
';
v_clob CLOB;
v_xml_str sys.xmltype;
v_resultcode VARCHAR2(200); v_parser dbms_xmlparser.parser;
v_doc dbms_xmldom.domdocument;
v_rootnode dbms_xmldom.domnode;
v_linelist dbms_xmldom.domnodelist;
v_detailnodes dbms_xmldom.domnode;
v_detaillist dbms_xmldom.domnodelist;
v_detailnode dbms_xmldom.domnode;
v_detail_num NUMBER;
v_linenode dbms_xmldom.domnode;
v_count NUMBER;
v_line_num VARCHAR2(100);
v_name VARCHAR2(100);
v_sex VARCHAR2(100);
v_age VARCHAR2(100);
rootname VARCHAR2(100);
v_header_name VARCHAR2(100);
BEGIN
--1.创建CLOB
dbms_lob.createtemporary(v_clob, TRUE);
v_clob := v_xmlclob;
--2.创建解析器,加载v_clob
v_parser := dbms_xmlparser.newparser;
dbms_xmlparser.parseclob(v_parser, v_clob);
dbms_lob.freetemporary(v_clob); --释放clob
--3.得到根节点
v_rootnode := xmldom.makenode(xmldom.getdocumentelement(xmlparser.getdocument(v_parser)));
rootname := xmldom.getnodename(v_rootnode);
dbms_output.put_line(rootname);
--4.获取根节点中的值
dbms_xslprocessor.valueof(v_rootnode,
'header_name/text()',
v_header_name); dbms_output.put_line(v_header_name);
--5.获取根节点中的属性值
v_resultcode := xmldom.getattribute(xmldom.makeelement(v_rootnode),
'ADDRESS');
dbms_output.put_line(v_resultcode);
--6.创建doc
v_doc := dbms_xmlparser.getdocument(v_parser);
dbms_xmlparser.freeparser(v_parser); --释放解析器
v_linelist := dbms_xmldom.getelementsbytagname(v_doc, 'line'); --获取line节点
v_count := dbms_xmldom.getlength(v_linelist);
dbms_output.put_line('v_count:' || v_count);
FOR cur_emp IN 0 .. v_count - 1 LOOP
v_linenode := dbms_xmldom.item(v_linelist, cur_emp); --获取节点
dbms_xslprocessor.valueof(v_linenode, 'line_num/text()', v_line_num); --得到节点下元素的值
dbms_output.put_line('v_line_num' || v_line_num);
v_detaillist := dbms_xslprocessor.selectnodes(v_linenode, 'detail'); --获取该节点下的子节点detail
v_detail_num := dbms_xmldom.getlength(v_detaillist);
dbms_output.put_line('v_detail_num:' || v_detail_num);
FOR cur_emp2 IN 0 .. v_detail_num - 1 LOOP
v_detailnode := dbms_xmldom.item(v_detaillist, cur_emp2);
dbms_xslprocessor.valueof(v_detailnode, 'age/text()', v_age); --行号
dbms_output.put_line('age' || v_age);
END LOOP;
END LOOP;
xmldom.freedocument(v_doc); --释放doc资源
EXCEPTION
WHEN OTHERS THEN
dbms_lob.freetemporary(v_clob);
dbms_xmlparser.freeparser(v_parser);
dbms_xmldom.freedocument(v_doc); END;

备注:PLSQL解析xml精确定位具体节点。

PLSQL-解析XML的更多相关文章

  1. PLSQL解析XML文件

     参考网上资料学习汇总 在PL/SQL中利用XML ,Oracle提供了几个组件,让开发人员能轻松地利用XML技术.这些组件包括: 1.  XML 分析程序.即用来分析.构造和验证XML文档.. ...

  2. PLSQL读取XML的数据

    最近公司做的几个项目,都是通过EBS与外部系统的Web Service进行数据的交互,而调用Web Service的时候,我们所传送的数据,都是按照约定的XML格式来传递,所以EBS接收到数据之后,需 ...

  3. Android 解析XML文件和生成XML文件

    解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...

  4. Android之解析XML

    1.XML:可扩展标记语言. 可扩展标记语言是一种很像超文本标记语言的标记语言. 它的设计宗旨是传输数据,而不是显示数据. 它的标记没有被预定义.需要自行定义标签. 它被设计为具有自我描述性. 是W3 ...

  5. Android之Pull解析XML

    一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...

  6. Android之DOM解析XML

    一.DOM解析方法介绍 DOM是基于树形结构的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树,检索所需数据.分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息 ...

  7. Android之SAX解析XML

    一.SAX解析方法介绍 SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备. SAX解析器是一种基于事件的解析器,事件驱动 ...

  8. Android 使用pull,sax解析xml

    pull解析xml文件 1.获得XmlpullParser类的引用 这里有两种方法 //解析器工厂 XmlPullParserFactory factory=XmlPullParserFactory. ...

  9. 用 ElementTree 在 Python 中解析 XML

    用 ElementTree 在 Python 中解析 XML 原文: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python- ...

  10. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...

随机推荐

  1. 《我想进大厂》之Dubbo普普通通9问

    这是面试专题系列第四篇,Dubbo系列.Dubbo本身并不复杂,而且官方文档写的非常清楚详细,面试中dubbo的问题一般不会很多,从分层到工作原理.负载均衡策略.容错机制.SPI机制基本就差不多了,最 ...

  2. 【Luogu】P3005 [USACO10DEC]槽的游戏The Trough Game

    一.题目 题目描述 农夫约翰和贝西又在玩游戏.这个游戏需要很多个槽. 农夫约翰在谷仓里藏起来了N(1<=N<=20)个槽,并且他已经把其中的一些装上了食物.贝西以"在这个表里(表 ...

  3. docker设置http访问

    1 编辑配置文件    vim /etc/docker/daemon.json { "registry-mirrors": ["https://a4fyjv0u.mirr ...

  4. intellij idea:设置java方法注释模板(intellij idea 2019.2)

    一,打开方法注释模板的编辑窗口 菜单file->打开settings editor栏目下->打开Live Templates   说明:刘宏缔的架构森林是一个专注架构的博客,地址:http ...

  5. 分布式机器学习:如何快速从Python栈过渡到Scala栈

    首先介绍下我的情况和需求,如果你跟我类似,那么这篇文章将很有帮助: 我之前的技术栈主要是Java.Python,机器学习方面主要用到是pandas.numpy.sklearn.scipy.matplo ...

  6. CSDN的Markdown编辑器实用技巧(傻瓜式教程)

    markdown编辑器被很多人声称是可以取代word的文字编辑器,其优点我们在这就不再过多赘述了,但对于一些初次接触的人来说,或多或少都有还些不适应,其主要原因在于一些常见的功能突然不知道怎么实现,所 ...

  7. localStorage.getItem得到的是[object Object] 的解决方案

    设计背景: 购物车要实现本地存储,避免刷新页面数据丢失 实现方案: 1,本地储存,进入页面获取本地数据,在进行数据操作 2,每操作一次数据就将数据传给后台进行保存,(操作数据多,用户量大对服务器造成压 ...

  8. 论文解读《ImageNet Classification with Deep Convolutional Neural Networks》

    这篇论文提出了AlexNet,奠定了深度学习在CV领域中的地位. 1. ReLu激活函数 2. Dropout 3. 数据增强 网络的架构如图所示 包含八个学习层:五个卷积神经网络和三个全连接网络,并 ...

  9. JavaScript核心 Dom Bom

    <div id="time">2020-9-27</div> <script> //文档页面从上往下加载,先有标签才能获取元素对象,script ...

  10. SDOI征途--斜率优化

    题目描述 给定长为 n 的数列 a, 要求划分成 m 段,使得方差最小, 输出方差\(*m^2\) 题解 斜率优化好题 准备部分 设第 i 段长为 \(len_i\) 先考虑方差(\(S^2\))的式 ...