求助各位高手:我现在需要写存储过程解析XML文件。
在XML scheama的定义中,有些元素不是必须的,所以解析的时候
我不能通过节点的序号来确定该元素的值对应的是数据库的哪个字段。例如:
<person>
<name> henry </name>
<age> 25 </age>
<sex> male </sex>
<email> [email protected] </email>
</person>上面我要解析的XML文件中,是否含有sex元素是未知的。
通常取节点数据方式
childNodes := xmldom.getChildNodes(personNode);
sex := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( childNodes, 2 )));
在此时并不知道取到的数据是sex还是email在实际项目的XML定义中,存在大量上述情况,按照index的方式取数据
是不实用的,只有通过节点名字我才可以知道所取的数据对应数据库哪
个字段。但是我一直没找到可以使用节点的名字来取得节点的方法,
在oracle的官方文档中我看到getNamedItem()函数,但是只针对
xdb.dbms_xmldom.domnamednodemap类型的数据,好像只有取节点属
性的时候才返回该类型。求高手指点。

解决方案 »

  1.   

    详细地参考一下5楼的:http://topic.csdn.net/u/20080905/20/b4eff165-b180-4fe2-960f-a157273380c3.html
      

  2.   

    谢谢楼上,我是利用Oracle的系统包xmldom, xmlparse的过程把XML文件转到Oracle中。
    我的数据库表结构已经定义好了是不能更改的。
    因为XML中有些节点是可以不存在的,所以采用遍历的方式获取节点让我无法判断节点对应的
    数据库字段。
      

  3.   

    再给一个树型查找的例子:
    http://topic.csdn.net/t/20030512/23/1774674.html
      

  4.   

    能否使用connect by 和 start with 来代替getNamedItem()函数?
      

  5.   

    好像不可以的吧,只能用oracle提供的XDB.DBMS_XMLDOM  XDB.DBMS_XMLPARSER两个包里面的函数来解析XML
      

  6.   

    不能使用extractValue和xmlsequence吗?