待解析的XML
<?xml version="1.0"?> 
<PEOPLE> 
     <PERSON PERSONID="E01"> 
         <NAME>Tony Blair </NAME> 
         <ADDRESS>10 Downing Street, London, UK </ADDRESS> 
     </PERSON> 
</PEOPLE> 

存储过程如下 

create or replace procedure SP_0001_ParsePERSON2( v_wjm       IN varchar2, /*文件名*/
                                                v_log       IN varchar2, /*日志文件名*/
                                                PReturnCode OUT varchar2, /*S-成功、E-失败*/
                                                PReturnMsg  OUT varchar2 ) As
  /******* 定义初始化变量***************/
  EXCP_NOFILEDIR exception; 
  EXCP_NOFILENAME exception; 
  v_count    NUMBER; 
  xmlPar     XMLPARSER.parser := XMLPARSER.NEWPARSER;
  doc        xmldom.DOMDocument;
  len        integer;
  rootNodes  xmldom.DOMNodeList;
  chilNodes  xmldom.DOMNodeList;
  tempNode   xmldom.DOMNode;
  tempArrMap xmldom.DOMNamedNodeMap;  v_FileDir  VARCHAR(100); /* 文件路径 */
  v_fileName VARCHAR(100); /* 文件路径 */
  v_fileLog  VARCHAR(100); /* 文件路径 */  pid     varchar2(4);
  name    varchar2(50);
  address varchar2(200);
  tel     varchar2(20);
  fax     varchar2(20);
  email   varchar(100);
  tmp     integer;
BEGIN  xmlPar := xmlparser.newParser;
  xmlparser.setErrorLog(xmlPar, v_log);
  xmlparser.parse(xmlPar, v_wjm);  doc := xmlparser.getDocument(xmlPar);
  --释放解析器
  xmlparser.freeParser(xmlPar);
  --取得根目录
  rootNodes := xmldom.getElementsByTagName(doc, 'PERSON');
  len       := xmldom.getLength(rootNodes);
  --遍历根节点
  for i in 0 .. len - 1 loop
    tempNode   := xmldom.item(rootNodes, i);
    tempArrMap := xmldom.getAttributes(tempNode);
    pid        := xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'PERSON'));
    chilNodes  := xmldom.getChildNodes(tempNode);
    tmp        := xmldom.getLength(chilNodes);
    name       := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(chilNodes,0)));
    address    := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(chilNodes,1)));
    INSERT INTO PEOPLE VALUES (pid, name, address);
  end loop;
  commit;
  --释放文档对象
  xmldom.freeDocument(doc);
  PReturnCode := 'S';
exception
end SP_0001_ParsePERSON;
调试到这里时  xmlparser.setErrorLog(xmlPar,  'C:\datafile\xmllog.txt'); 
报ORA-31020: The operation is not allowed, Reason: Not supported 
注释上一句,执行这句时 xmlparser.parse(xmlPar, 'C:\datafile\person.xml'); 
又报ORA-29280: invalid directory path 不知道是哪里出的问题,用的DBA的权限调试也报错。试了很多次就是不行。。帮忙看下
参考http://www.oracle-base.com/articles/8i/ParseXMLDocuments8i.php说先要安装xdk,我用的是oracle10g的数据库,不知道要不要安装xdk
但是执行到xmlPar := xmlparser.newParser;是没错的

解决方案 »

  1.   

    *************************************************************************** 思想决定行动,交流产生力量。
    程序员在深圳QQ群大集 专业分类: 
    程序员在深圳JAVA群4247660 
    程序员在深圳c++群15195967 
    程序员在深圳.NET群Ⅱ:12203296 
    程序员在深圳TCP/IP协议栈开发:16956462 
    程序员在深圳JS & AJAX群:12578377 
    程序员在深圳英语学习群:23864353 
    深序员在深圳VB:11055959 
    程序员在深圳c++Ⅱ17409451 
    程序员在深圳c++群15195967 
    程序员在深圳嵌入式开发群37489763 
    程序员在深圳移动开发群31501597 
    程序员在深圳创业群33653422 不限专业分类: 
    高级群:17538442 
    第三群:2650485 
    第二群:7120862 
    第五群:29537639 
    第四群:28702746 
    第六群:10590618 
    第七群:10543585 
    第八群:12006492 
    第九群:19063074 
    第十群:2883885 
    第十一群:25460595 
    第十二群:9663807 深圳程序员QQ群联盟成立两年多,拥有三十个以上的QQ群,人数达两千多人,有30%以上的成员的经验丰富的老手,包括国内外顶级大公司的成员(如微软、IBM,SUN,华为)、国内著名高校和研究院成员,和有丰富实践经验的高级程序(包括参加过上亿元的项目的架构师),有很热爱技术的成员(包括自己写过嵌入式操作系统),还有少数女程序员。现推介如下QQ群,如有兴趣速速加入:深程高级群:17538442(此群不欢迎新手,已经在深圳工作的,月薪6K以下的不欢迎)c++:15195967 .NET:12203296 mobile:31501597嵌入式:37489763 JAVA:4247660   
    ——————————————————————————————————————————  
    希望大家不要认为群能给你送来什么,这只是一个平台,让同等水平的程序员有个交流的机会或许能得到一点信息或许能带来一点启发。
    有人说常聊QQ的人肯定技术不怎么样,但其实很多技术高朋友不需要做一些简单的重复劳动所以还是有时间聊天的。 *****************************************************************************
      

  2.   

    嘿嘿。http://www.japee.com.cn/jew/pages/Main.aspx