首先要定义type类型
TYPE partyExtTable IS RECORD(
ptype NUMBER(5),
pVALUE VARCHAR2(40));
TYPE partyBaseInfo IS RECORD(
PARTY_id VARCHAR(12),
party_name VARCHAR2(200),
party_addr VARCHAR2(250),
mail_addr VARCHAR2(250));
其次要声明type
TYPE partyExtTableArray IS TABLE OF partyExtTable;
PROCEDURE parsexml(inxml IN VARCHAR2,
partyExtList OUT partyExtTableArray) IS
l_parser xmlparser.Parser;
l_doc xmldom.DOMDocument;
tempNode xmldom.DOMNode;
InfoNode xmldom.DOMNodeList;
chilNodes xmldom.DOMNodeList;
len NUMBER(4);
v_type VARCHAR2(10);
v_value VARCHAR2(50);
BEGIN
l_parser := xmlparser.newParser;
xmlparser.parseClob(l_parser, inxml);
l_doc := xmlparser.getDocument(l_parser);
xmlparser.freeParser(l_parser);
InfoNode := xmldom.getElementsByTagName(l_doc, 'partyExt');
len := xmldom.getLength(InfoNode);
/*引用type*/
partyExtList := partyExtTableArray();
FOR i IN 1 .. len LOOP
partyExtList.extend; --这个很重要
tempNode := xmldom.item(InfoNode, (i - 1)); --获取第i+1个partyExt节点
chilNodes := xmldom.getChildNodes(tempNode);
v_type := getNodeValue(xmldom.getFirstChild(xmldom.item(chilNodes,0)));
v_value := getNodeValue(xmldom.getFirstChild(xmldom.item(chilNodes, 1)));
/*赋值*/
partyExtList(I).ptype := v_type;
partyExtList(I).pvalue := v_value;
dbms_output.put_line(v_type || ' '||v_value);
END LOOP;
xmldom.freeDocument(l_doc);
EXCEPTION
WHEN OTHERS THEN
partyExtList := NULL;
END;