解决方案 »

  1.   

    在ORACLE中使用XMLDOM心得杂记(随时补充)
      

  2.   

    该处理 需要先解析   然后再插入,删除元素     
    目前能获取到tab下的节点元素  以及值信息 
     procedure p_getXml(sxml in clob) is
        --创建xml解析器实例xmlparser.Parser
        xmlPar xmlparser.Parser := xmlparser.newParser;
        --定义DOM文档
        xDoc xmldom.DOMDocument;
      
        --定义inxml子节点数目变量
        lenInxml integer;
        --定义节点列表,存放inxml节点们
        itemNodes xmldom.DOMNodeList;
        --定义节点列表,存放inxml子节点们
        childNodes xmldom.DOMNodeList;
        --定义节点,存放单个inxml节点
        itemNode  xmldom.DOMNode;
        sname     varchar(100);
        svalue    varchar(100);
        tmp       number; 
      begin 
      
        --解析xmlStr中xml字符串,并存放到xmlPar中
        xmlparser.parseClob(xmlPar, sxml);
        --将xmlPar中的数据转存到dom文档中
        xDoc := xmlparser.getDocument(xmlPar);
        xmlparser.freeParser(xmlPar); --释放解析器实例
        --获取所有sxml节点
        itemNodes := xmldom.getElementsByTagName(xDoc, 'tab');
        --获取sxml节点的个数
        lenInxml := xmldom.getLength(itemNodes);
         --遍历所有的sxml节点
        for i in 0 .. lenInxml - 1 loop
          begin
            --获取节点列表中的第i个sxml节点
            itemNode := xmldom.item(itemNodes, i);
            --获取第i个inxml节点的所有子节点
            childNodes := xmldom.getChildNodes(itemNode);
            tmp        := xmldom.GETLENGTH(childNodes);
          
            for j in 0 .. tmp - 1 loop
              --获取所有子节点的值
              sname  := xmldom.getNodeName(xmldom.item(childNodes, j));
              svalue := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(childNodes,
                                                                             j)));
            
              dbms_output.put_line(sname || '-');
              dbms_output.put_line(svalue || '--');
            end loop;
          end;
        end loop;
      
        --是否dom文档
        xmldom.freeDocument(xDoc); 
      --异常和错误处理
      EXCEPTION
        WHEN OTHERS THEN
          dbms_output.put_line(SQLERRM );
      end;能否帮我补充完善下?