方法一、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;