我有一个简单的XML文件,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!--Generic Params-->
<PARAM_LIST>
<PARAM>
<KEY>USERNAME</KEY>
<VALUE>DAVID</VALUE>
</PARAM>
</PARAM_LIST>
我想使用DBMS_XMLDOM解析它,我输入LOOP但是我无法从KEY标记或VALUE中获取值,而且,我甚至不确定我是否完全访问PARAM标记。
lv_ParamList := dbms_xmldom.getElementsByTagName(lv_res_domDoc, 'PARAM_LIST');
IF NOT dbms_xmldom.isnull(lv_ParamList) THEN
-- Looping over parameters
FOR lv_ParamNo IN 0..dbms_xmldom.getLength(lv_ParamList)-1 LOOP
lv_ParamNode := dbms_xmldom.item(lv_ParamList,lv_ParamNo);
lv_TempNode := dbms_xmldom.getNamedItem(lv_ParamAttributes,'USERNAME');
lv_Vc2_TagValue := dbms_xmldom.getValue(dbms_xmldom.makeattr(lv_TempNode));
lv_TempNode := dbms_xmldom.getNamedItem(lv_ParamAttributes,'KEY');
lv_Vc2_TagValue := dbms_xmldom.getValue(dbms_xmldom.makeattr(lv_TempNode));
END LOOP;
END IF;
请协助。
答案 0 :(得分:1)
管理如此克服它:
FOR lv_ParamNo IN 0..dbms_xmldom.getLength(lv_ParamList)-1 LOOP
lv_ParamNode := DBMS_XMLDOM.Item(lv_ParamList, lv_ParamNo);
lv_ParamSet := Dbms_Xmldom.Getchildnodes(lv_ParamNode);
lv_Num_EventId := dbms_xmldom.getLength(lv_ParamSet);
FOR lv_ParamInNo IN 0..dbms_xmldom.getLength(lv_ParamSet)-1 LOOP
lv_ParamKey := Dbms_Xmldom.Item(lv_ParamSet,lv_ParamInNo);
lv_Vc2_DeviceName := Dbms_Xmldom.Getnodename(lv_ParamKey);
lv_TempNode := Dbms_Xmldom.Getfirstchild(lv_ParamKey);
lv_Vc2_KeyTagName := Dbms_Xmldom.Getnodevalue(lv_TempNode);
IF lv_Vc2_KeyTagName = 'USERNAME' THEN
lv_ParamKey := Dbms_Xmldom.Item(lv_ParamSet,lv_ParamInNo+1);
lv_Vc2_TagName := Dbms_Xmldom.Getnodename(lv_ParamKey);
lv_TempNode := Dbms_Xmldom.Getfirstchild(lv_ParamKey);
lv_Vc2_FulUserName := Dbms_Xmldom.Getnodevalue(lv_TempNode);
ELSIF lv_Vc2_KeyTagName = 'ADDRESS' THEN
lv_ParamKey := Dbms_Xmldom.Item(lv_ParamSet,lv_ParamInNo+1);
lv_Vc2_TagName := Dbms_Xmldom.Getnodename(lv_ParamKey);
lv_TempNode := Dbms_Xmldom.Getfirstchild(lv_ParamKey);
lv_Vc2_Address := Dbms_Xmldom.Getnodevalue(lv_TempNode);
END IF;
END LOOP;
END LOOP;
这意味着我为每个PARAM节点迭代XML。 对于每个这样的节点,我迭代KEY VALUE对,得到KEY并移动(在内循环中)到相关值。 一个小的缺点是我迭代KEY - &gt;内环获得VALUE,迭代VALUE - &gt;转到下一个键。