<?xml version="1.0" encoding="UTF-8"?>
<root>abcd</root>
PROCEDURE printElementAttributes(xmlfile IN CLOB,myRETURN OUT VARCHAR2) IS
  Parser xmlparser.parser;     --新建解析器实例
  doc xmldom.DOMDocument;
  nl xmldom.DOMNodeList;
  len1 number;
  len2 number;
  n xmldom.DOMNode;
  e xmldom.DOMElement;
  nnm xmldom.DOMNamedNodeMap;
  attrname varchar2(100);
  attrval varchar2(100);
  BEGIN
    Parser := Xmlparser.Newparser;
    Xmlparser.parseClob(Parser, xmlfile);
    Doc := Xmlparser.Getdocument(Parser);    nl := xmldom.getElementsByTagName(Doc, '*');
    len1 := xmldom.getLength(nl);    FOR j in 0..len1-1 loop
     n := xmldom.item(nl, j);
     e := xmldom.makeElement(n);
     myRETURN := xmldom.getTagName(e) || ' '|| myRETURN || (xmldom.getNodeValue(n));
     --这句执行后,xmldom.getTagName(e)的返回值是“root”,但是root的值为什么取不到呢。xmldom.getNodeValue(n)
     --这个是空的。郁闷
  end loop;
    --释放文档对象
    xmldom.freeDocument(Doc);
    --解析完毕,释放解析器实例
    xmlparser.freeParser(Parser);
  END printElementAttributes;

解决方案 »

  1.   

    xmldom.getNodeValue(n)改成xmldom.getNodeValue(xmldom.getFirstChild(n))
      

  2.   

    能讲讲这句话是什么意思么? 为什么要加getFirstChild才行。
      

  3.   

    去mode上的值,在dom里 attribute,text都是node上一个子对象。
      

  4.   


    <?xml version="1.0" encoding="UTF-8"?>
    <root>abcd</root>去mode上的值,在dom里 attribute,text都是node上一个子对象。
    请问:在上面的这个XML中,root的FirstChild是什么?
      

  5.   

    xmldom.getNodeValue(n) 改成 xmldom.getNodeValue(xmldom.getFirstChild(n))