oracle 2种解析xml方法

方法一、dom解析

 <![

<partyExtInfo>
 <partyExt>
  <type><![CDATA[11]]></type>
  <value><![CDATA[250470603]]></value>
 </partyExt>
 <partyExt>
  <type><![CDATA[13]]></type>
  <value><![CDATA[2510005888582000]]></value>
 </partyExt>
 <partyExt>
  <type><![CDATA[5]]></type>
  <value><![CDATA[27491179]]></value>
 </partyExt>
</partyExtInfo>

 

 

]>

 

 

PROCEDURE PARSE_IN_CLOB(INSTR IN VARCHAR2, OUTCLOB OUT CLOB) IS
    L_PARSER     XMLPARSER.PARSER;
    L_DOC        XMLDOM.DOMDOCUMENT;
    L_NODELIST   XMLDOM.DOMNODELIST;
    L_NODE       XMLDOM.DOMNODE;
    L_CNT        NUMBER;
    L_XPATH      VARCHAR2(100);
    L_STR        VARCHAR2(100);
    L_CLOB       CLOB;
    L_CENTERFLAG NUMBER(2);

  BEGIN
    L_CLOB := INSTR;

    L_PARSER := XMLPARSER.NEWPARSER;
    XMLPARSER.PARSECLOB(L_PARSER, L_CLOB);

    L_DOC := XMLPARSER.GETDOCUMENT(L_PARSER);

    --提取第个订单dom的字节
    L_NODELIST := XSLPROCESSOR.SELECTNODES(XMLDOM.MAKENODE(L_DOC),
                                           '/root/info');

    L_CNT := GETDOMNODELENGTH(L_NODELIST);

    CENTERROWCNT := 0;
    CENTERROWCNT := L_CNT;
    INITCENTER(L_CNT);

    FOR I IN 0 .. L_CNT - 1 LOOP
      --按组取值
      L_NODE := XMLDOM.ITEM(L_NODELIST, I);
      L_XPATH := 'centerFlag';
      L_STR := GETSTRINGBYXPATH(L_NODE, L_XPATH);
      L_CENTERFLAG := TO_NUMBER(L_STR);
      CENTERS(I + 1).CENTERFLAG := L_STR;

      L_XPATH := 'objId';
      L_STR   := GETSTRINGBYXPATH(L_NODE, L_XPATH);

      CENTERS(I + 1).OBJID := L_STR;

      L_XPATH := 'objType';
      L_STR := GETSTRINGBYXPATH(L_NODE, L_XPATH);
      CENTERS(I + 1).OBJTYPE := L_STR;

      L_XPATH := 'areaId';
      L_STR := GETSTRINGBYXPATH(L_NODE, L_XPATH);
      CENTERS(I + 1).AREAID := L_STR;

      L_XPATH := 'coId';
      L_STR := GETSTRINGBYXPATH(L_NODE, L_XPATH);
      CENTERS(I + 1).COID := L_STR;

    END LOOP;

    IF L_CENTERFLAG = 1 THEN
      --省中心接口
      RETRUN_TO_CENTER(OUTCLOB);
    END IF;

    IF L_CENTERFLAG = 2 THEN
      --提供给集团接口
      RETRUN_TO_JTCENTER(OUTCLOB);
    END IF;

  END;

 

    FUNCTION GETSTRINGBYXPATH(INNODE IN XMLDOM.DOMNODE, INXPATH IN VARCHAR2)
    RETURN VARCHAR2 IS
    L_TEMP VARCHAR2(1000);
  BEGIN
    L_TEMP := GETVALUEBYXPATH(INNODE, INXPATH);
    IF (L_TEMP IS NULL) OR (L_TEMP = 'error') THEN
      RETURN '';
    END IF;
    RETURN L_TEMP;
  END;


    FUNCTION GETVALUEBYXPATH(INNODE IN XMLDOM.DOMNODE, INXPATH IN VARCHAR2)
    RETURN VARCHAR2 IS
    L_TEMP VARCHAR2(1000);
  BEGIN
    L_TEMP := XSLPROCESSOR.VALUEOF(INNODE, INXPATH);
    RETURN L_TEMP;
  EXCEPTION
    WHEN OTHERS THEN
      RETURN 'error';
  END;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值