`

(转)使用 PL/SQL 的 DOM API 解析 XML 文档

阅读更多
这个程序示范了使用 PL/SQL 的 DOM API 解析 XML 文档,
-- 使用了 SYS.XMLDOM 和 SYS.XMLPARSER包
-- 程序解析了输入的 XML 文件,打印文档所有元素和元素的属性

connect scott/tiger;

set serveroutput on;
create or replace procedure domsample(dir varchar2, inpfile varchar2,
                                      errfile varchar2) is
-- 参数说明:
-- dir      基本目录,如 'd:\xml\plsql'
-- inpfile  输入文件名,不含路径,如 'student.xml'
-- errfile  错误日志文件,保存解析错误信息, 如 'err.log'

p xmlparser.parser;
doc xmldom.DOMDocument;

-- 打印文档中的元素及元素的文本信息
procedure printElements(doc xmldom.DOMDocument) is
  nl xmldom.DOMNodeList;
  len number;
  n xmldom.DOMNode;

begin
   -- 获取所有元素
   nl := xmldom.getElementsByTagName(doc, '*'); -- * 表示所有元素,包括根元素
   len := xmldom.getLength(nl);

   -- 遍历所有元素
   for i in 0..len-1 loop
      n := xmldom.item(nl, i);
      dbms_output.put_line(xmldom.getNodeName(n) || ':'
                           || xmldom.getNodeValue(xmldom.getFirstChild(n)));
   end loop;

   dbms_output.put_line('');  -- 打印空行
end printElements;

-- 打印文档中每个元素的属性
procedure printElementAttributes(doc xmldom.DOMDocument) is
  nl xmldom.DOMNodeList;
  len1 number;
  len2 number;
  n xmldom.DOMNode;
  e xmldom.DOMElement;
  nnm xmldom.DOMNamedNodeMap;
  attrname varchar2(100);
  attrval varchar2(100);

begin

   -- 获取所有元素
   nl := xmldom.getElementsByTagName(doc, '*'); -- * 表示所有元素,包括根元素
   len1 := xmldom.getLength(nl);

   -- 遍历所有元素
   for j in 0..len1-1 loop
      n := xmldom.item(nl, j);
      e := xmldom.makeElement(n);
      dbms_output.put_line(xmldom.getTagName(e) || '!');
     
      -- 获取元素的所有属性
      nnm := xmldom.getAttributes(n);

     if (xmldom.isNull(nnm) = FALSE) then  -- 如果有属性
        len2 := xmldom.getLength(nnm);

        -- 遍历所有属性
        for i in 0..len2-1 loop
           n := xmldom.item(nnm, i);
           attrname := xmldom.getNodeName(n);
           attrval := xmldom.getNodeValue(n);
           dbms_output.put_line(' ' || attrname || ' = ' || attrval);
        end loop;
        dbms_output.put_line('');
     end if;
   end loop;

end printElementAttributes;

begin
-- 新建解析器实例
   p := xmlparser.newParser;

-- 设置解析器特性
   xmlparser.setValidationMode(p, TRUE); -- 是否使用文档指定的DTD验证文档合法性
   xmlparser.setErrorLog(p, dir || '\' || errfile); -- 设置错误日志文件
   xmlparser.setBaseDir(p, dir);   -- 设置基本目录

-- 解析输入的xml文件
   xmlparser.parse(p, dir || '\' || inpfile);

-- 获取解析后的文档对象
   doc := xmlparser.getDocument(p);

-- 释放解析器实例
   xmlparser.freeParser(p);

-- 打印文档元素
   dbms_output.put('文档元素: ');
   printElements(doc);

-- 打印文档元素属性
   dbms_output.put_line('每个元素的属性: ');
   printElementAttributes(doc);

-- 释放文档对象
   xmldom.freeDocument(doc);

-- 处理异常
exception
  when xmldom.INDEX_SIZE_ERR then
     raise_application_error(-20120, 'Index Size error');
  when xmldom.DOMSTRING_SIZE_ERR then
     raise_application_error(-20120, 'String Size error');
  when xmldom.HIERARCHY_REQUEST_ERR then
     raise_application_error(-20120, 'Hierarchy request error');
  when xmldom.WRONG_DOCUMENT_ERR then
     raise_application_error(-20120, 'Wrong doc error');
  when xmldom.INVALID_CHARACTER_ERR then
     raise_application_error(-20120, 'Invalid Char error');
  when xmldom.NO_DATA_ALLOWED_ERR then
     raise_application_error(-20120, 'Nod data allowed error');
  when xmldom.NO_MODIFICATION_ALLOWED_ERR then
     raise_application_error(-20120, 'No mod allowed error');
  when xmldom.NOT_FOUND_ERR then
     raise_application_error(-20120, 'Not found error');
  when xmldom.NOT_SUPPORTED_ERR then
     raise_application_error(-20120, 'Not supported error');
  when xmldom.INUSE_ATTRIBUTE_ERR then
     raise_application_error(-20120, 'In use attr error');
end domsample;
/
show errors;

/*
-- 可以使用以下语句进行调用
execute domsample('d:\xml\plsql', 'student.xml', 'err.log');
*/
分享到:
评论

相关推荐

    Creating XML Documents with PL/SQL

    文件"PLSQL解析XML.ppt"很可能包含了更详细的教程或示例,讲解了如何使用PL/SQL解析XML文档,可能包括XMLType的使用、DOM模型的操作以及XML数据的查询和更新方法。通过学习这个文件,你可以深入理解PL/SQL与XML的...

    從 PL/SQL 中調用 ROR 创建的 Web 服务

    4. **处理响应**:响应体通常需要解析,例如,如果是 JSON 格式,可以使用 XML 库(如 DBMS_XMLDOM 或 DBMS_XSLPROCESSOR)进行解析,提取所需的数据。 5. **错误处理**:务必处理可能的网络错误、API 错误以及解析...

    DBMS_XMLDOM DBMS_XMLPARSER DBMS_XMLQUERY 文档

    Oracle数据库系统提供了强大的XML处理能力,这主要体现在其内置的几个PL/SQL包上,如DBMS_XMLDOM、DBMS_XMLPARSER和DBMS_XMLQUERY。这些包为开发者提供了处理XML文档的一整套工具,使得在数据库环境中进行XML数据的...

    plsql_xml_docs.rar

    4. **XMLParser组件**:Oracle提供了XMLParser组件,用于解析XML文档,生成DOM(Document Object Model)树或者SAX(Simple API for XML)事件流。DOM允许整个XML文档在内存中以树形结构表示,适合小规模数据;SAX则...

    ORACLE中解析XML.pdf

    在Oracle中,可以通过xquery和sql/xml函数来查询XML文档,也可以使用Java API for XML Processing (JAXP),或者通过SQL/XML函数和包,如XMLType、XSLTProcessor等来实现。 总结以上知识点,Oracle提供了一整套工具...

    Oracle表数据和xml文件间相互导入导出的PL.pdf

    在这个过程中,使用Oracle的XML解析器(`xmlparser.Parser`)和DOM文档对象模型(`xmldom.DOMDocument`)来处理XML文件。`xml2db`过程的主要工作是解析XML文件,然后生成并执行插入语句将数据插入到`PEOPLE`表中。 ...

    Oracle XML开发手册

    5. **PL/SQL与XML**:Oracle的PL/SQL编程语言提供了丰富的XML处理函数和包,如DBMS_XMLGEN、DBMS_XMLSAVE、DBMS_XSLPROCESSOR等,使得在PL/SQL中生成、解析、修改XML文档变得简单易行。 6. **XML索引**:为了提高...

    Oracle 内置程序包API

    总之,Oracle的DBMS_XMLDOM、XMLPARSER和XMLQUERY程序包为处理XML提供了强大的工具,通过它们的API,开发者可以在PL/SQL环境中高效地处理XML文档,满足各种复杂的数据操作需求。了解并熟练掌握这些API,对于提升...

    Oracle_XML开发手册Oracle_XML开发手册

    6. **PL/SQL与XML**:Oracle的PL/SQL编程语言提供了处理XML的强大工具,如XMLDOM和XMLType方法,可以方便地创建、解析和修改XML文档。 7. **Web服务集成**:Oracle数据库可以作为Web服务的提供者和消费者,通过WSDL...

    Oracle表数据和xml文件间相互导入导出的PL.docx

    2. 使用解析器对象解析XML文件,得到DOM(文档对象模型)对象。 3. 遍历DOM对象,构建SQL插入语句,并执行插入操作。 以下是一个简单的示例代码片段: ```plsql DECLARE p xmlparser.parser; xmlfile VARCHAR2...

    Oracle XML Developer’s Kit – XDK

    Oracle XML Developer’s Kit (XDK) 是一组由Oracle公司提供的用于处理XML文档的工具集合,主要功能包括读取、操作、...XML解析作为其中的核心部分,通过SAX和DOM两种API,为开发人员提供了灵活的处理XML文档的方式。

    XML数据转换.....

    用PL/SQL编写存储过程解析XML文档,并将数据插入到表中,使用内置包XMLPARSER和XMLDOM来解析和构造XML DOM对象 编写存储过程把表中的记录保存到XML文件,使用游标读取表中的记录,使用XMLDOM包的方法构造XML DOM对象...

    OracleXML开发手册

    7. **PL/SQL 与 XML**:Oracle 的过程化语言 PL/SQL 提供了处理 XML 的高级功能,如通过 XMLType 对象进行操作,以及使用 XMLDOM 和 XSLT(XSL 转换)进行数据转换。 8. **集成 Web 服务**:Oracle 数据库可以作为 ...

    jquery_aja_plsql_xml_hibernate

    标题 "jquery_aja_plsql_xml_hibernate" 涉及到的是几个关键的IT技术领域,包括jQuery、AJAX、PL/SQL、Hibernate以及XML。接下来,我们将详细探讨这些技术及其相互之间的联系。 1. **jQuery**:jQuery是一个广泛...

    java中xml文件的处理及oracle中xmltype的插入和读取.pdf

    XML 文件的处理在 Java 中可以使用多种库和方法,例如使用 JAXP(Java API for XML Processing)库来解析 XML 文件,使用 DOM(Document Object Model)库来操作 XML 文件,使用 SAX(Simple API for XML)库来读取 ...

    XML数据转换项目及Oracle有关资料

    XML解析器如DOM(Document Object Model)和SAX(Simple API for XML)提供了处理XML文档的接口。DOM将整个XML文档加载到内存中,适合小型文件;SAX则采用事件驱动模型,适用于大文件或资源有限的情况。XSLT...

    北大青鸟Oracle项目实战

    Oracle提供了内置的XML解析器,可以在PL/SQL中调用它来解析XML文档。如代码所示,`xmlparser.newParser()`方法用于创建一个新的XML解析器实例,而`xmlparser.parse()`则用于解析指定路径下的XML文件。 #### 4. XML...

    API文档大全

    Oracle API文档涵盖了PL/SQL语法、存储过程、游标、触发器等,而MySQL的API则主要关注如何使用SQL语句、连接管理、事务处理以及存储引擎的特性。这两种数据库的API文档对于数据库设计者和管理员来说至关重要。 至于...

    Oracle9i XML网络数据库开发指南(PDF)

    7. **XMLDB API**: Oracle提供了一系列的API,如Java、PL/SQL等,供开发者调用,以便于在应用程序中存取和操作XML数据。 8. **XML Schema支持**: Oracle9i支持XML Schema,用于定义XML文档的结构和数据类型,增强了...

Global site tag (gtag.js) - Google Analytics