使用oracle解析器从XML获取First Occurred值

使用oracle解析器从XML获取First Occurred值,第1张

概述我不是Oracle的专家,但根据要求,我使用Oracle Parser解析Xml.对于下面列出的xml即 <?xml version="1.0" encoding="iso-8859-1" ?><SearchOutput><rowArray> <Row> <cellArray> <Cell> <columnId>1 我不是Oracle的专家,但根据要求,我使用Oracle Parser解析Xml.对于下面列出的xml即

<?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值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1160785.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存