<?xml version="1.0" enCoding="iso-8859-1" ?><SearchOutput><rowArray> <Row> <cellArray> <Cell> <columnID>1</columnID> <valueArray> <Value> <value>IR000024575453</value> </Value> </valueArray> </Cell> <Cell> <columnID>5</columnID> <valueArray> <Value> <value>AZ12604823-001</value> </Value> </valueArray> </Cell> <Cell> <columnID>2</columnID> <valueArray> <Value> <value>IT06686</value> </Value> </valueArray> </Cell> <Cell> <columnID>9</columnID> <valueArray> <Value> <value>Hu Mics Metab K</value> </Value> </valueArray> </Cell> <Cell> <columnID>8</columnID> <valueArray> <Value> <value>2006-06-21</value> </Value> </valueArray> </Cell> <Cell> <columnID>7</columnID> <valueArray> <Value> <value>2006-07-27</value> </Value> </valueArray> </Cell> </cellArray> </Row></rowArray></SearchOutput>
我使用过该方法,其中l_xmlclob具有CLOB数据类型并在上面分配了xml.
FOR r IN ( SELECT rownum rn,cells FROM xmltable('/SearchOutput/rowArray/Row' passing XMLTYPE(l_xmlclob) columns CELLS XMLTYPE PATH './cellArray') ) LOOP DBMS_OUTPUT.PUT_liNE('Row: '||r.rn); FOR c IN ( SELECT colID,colval FROM xmltable('/cellArray/Cell' passing r.cells columns ColID NUMBER PATH './columnID',ColVAL VARCHAR(20) PATH './valueArray/Value/value') ) LOOP DBMS_OUTPUT.PUT_liNE('colID,col value: '||c.colID||','||c.colval); END LOOP; END LOOP;
它的工作正常,它的输出就像
Row: 1colID,col value: 1,IR000024575453colID,col value: 5,AZ12604823-001colID,col value: 2,IT06686colID,col value: 9,Hu Mics Metab KcolID,col value: 8,2006-06-21colID,col value: 7,2006-07-27
但是如果在xml中一个接一个地存在两个值并且我想仅选择第一个出现,即下面的xml,则会出现问题
<?xml version="1.0" enCoding="iso-8859-1" ?><SearchOutput><rowArray><Row> <cellArray> <Cell> <columnID>1</columnID> <valueArray> <Value> <value>Uganda</value> </Value> <Value> <value>Italy</value> </Value> </valueArray> </Cell> <Cell> <columnID>5</columnID> <valueArray> <Value> <value>AZ12604823-001</value> </Value> </valueArray> </Cell> <Cell> <columnID>2</columnID> <valueArray> <Value> <value>IT06686</value> </Value> </valueArray> </Cell> <Cell> <columnID>9</columnID> <valueArray> <Value> <value>Hu Mics Metab K</value> </Value> </valueArray> </Cell> <Cell> <columnID>8</columnID> <valueArray> <Value> <value>2006-06-21</value> </Value> </valueArray> </Cell> <Cell> <columnID>7</columnID> <valueArray> <Value> <value>2006-07-27</value> </Value> <Value> <value>2012-02-27</value> </Value> </valueArray> </Cell> </cellArray></Row></rowArray></SearchOutput>
我希望“uganda,AZ12604823-001,IT06686,Hu Mics Metab K,2006-06-21,2006-07-27”仅在该值内选择不是“意大利和2012-02-27”.但不要不知道如何修改现有代码.
解决方法 我猜这就是你要找的 –FOR r IN ( SELECT rownum rn,cells FROM xmltable('/SearchOutput/rowArray/Row' passing XMLTYPE(l_xmlclob) columns CELLS XMLTYPE PATH './cellArray') f ) LOOP DBMS_OUTPUT.PUT_liNE('Row: '||r.rn); FOR c IN ( SELECT colID,colval FROM xmltable('for $i in /cellArray/Cell return $i' passing r.cells columns ColID NUMBER PATH 'columnID',ColVAL VARCHAR(20) PATH 'valueArray/Value[1]/value') ) LOOP DBMS_OUTPUT.PUT_liNE('colID,'||c.colval); END LOOP; END LOOP;end;
要么
FOR r IN ( SELECT rownum rn,ColVAL VARCHAR(20) PATH './valueArray/Value[1]/value') ) LOOP DBMS_OUTPUT.PUT_liNE('colID,'||c.colval); END LOOP; END LOOP;
输出 –
Row: 1colID,UgandacolID,2006-07-27
值[1]将为您提供多行元素的第一个,即第一个Value单例.
总结以上是内存溢出为你收集整理的使用oracle解析器从XML获取First Occurred值全部内容,希望文章能够帮你解决使用oracle解析器从XML获取First Occurred值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)