Oracle 10g: Extract data (select) from XML (CLOB Type)

前端 未结 7 1313
[愿得一人]
[愿得一人] 2021-02-07 20:03

I\'m new in Oracle and I\'ve - maybe trivial - a problem in a select. (I\'m using Oracle 10g Express Edition).

I\'ve a DB with a field CLOB: mytab.xml This column have a

相关标签:
7条回答
  • 2021-02-07 20:20

    Try using xmltype.createxml(xml).

    As in,

    select extract(xmltype.createxml(xml), '//fax').getStringVal() from mytab;
    

    It worked for me.

    If you want to improve or manipulate even further.

    Try something like this.

    Select *
    from xmltable(xmlnamespaces('some-name-space' as "ns", 
                                      'another-name-space' as "ns1",
                               ), 
                        '/ns/ns1/foo/bar'
                        passing xmltype.createxml(xml) 
                        columns id varchar2(10) path '//ns//ns1/id',
                                idboss varchar2(500) path '//ns0//ns1/idboss',
                                etc....
    
                        ) nice_xml_table
    

    Hope it helps someone.

    0 讨论(0)
  • 2021-02-07 20:21

    You can achieve with below queries

    1. select extract(xmltype(xml), '//fax/text()').getStringVal() from mytab;

    2. select extractvalue(xmltype(xml), '//fax') from mytab;

    0 讨论(0)
  • 2021-02-07 20:22

    You can try creating DBMS_XMLPARSER.parser object from the CLOB XML and get a DBMS_XMLDOM.DOMDocument object from it. Then use DBMS_XMLDOM package methods to get the value of any node.

       xml_            CLOB := 'X';
       p               DBMS_XMLPARSER.parser;
       doc_            DBMS_XMLDOM.DOMDocument;
    
          -- Convert the CLOB into a XML-document
          P := DBMS_XMLPARSER.newparser();
          -- Parse the clob and get the XML-document
          DBMS_XMLPARSER.parseclob(p, xml_);
          doc_ := DBMS_XMLPARSER.getDocument(p);
    

    Then use the below methods to extract node value

    DBMS_XMLDOM.getElementsByTagName(doc_, 'NodeName'); DBMS_XMLDOM.GetNodeValue(node_obj_);

    Refer more about DBMS_XMLDOM methods here.

    0 讨论(0)
  • 2021-02-07 20:22

    In case of :

    <?xml version="1.0" encoding="iso-8859-1"?>
    <info xmlns="http://namespaces.default" xmlns:ns2="http://namespaces.ns2" >
        <id> 954 </id>
        <idboss> 954 </idboss>
        <name> Fausto </name>
        <sorname> Anonimo </sorname>
        <phone> 040000000 </phone>
        <fax> 040000001 </fax>
    </info>
    

    Query :

    Select *
    from xmltable(xmlnamespaces(default 'http://namespaces.default'
                                  'http://namespaces.ns2' as "ns",
                           ), 
                    '/info'
                    passing xmltype.createxml(xml) 
                    columns id varchar2(10) path '/id',
                            idboss varchar2(500) path '/idboss',
                            etc....
    
                    ) nice_xml_table
    
    0 讨论(0)
  • 2021-02-07 20:22

    In case the XML store in the CLOB field in the database table. E.g for this XML:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Awmds>
        <General_segment>
            <General_segment_id>
            <Customs_office_code>000</Customs_office_code>
        </General_segment_id>
    </General_segment>
    </Awmds>
    

    This is the Extract Query:

    SELECT EXTRACTVALUE (
        xmltype (T.CLOB_COLUMN_NAME),
        '/Awmds/General_segment/General_segment_id/Customs_office_code')
        AS Customs_office_code
    FROM TABLE_NAME t;
    
    0 讨论(0)
  • 2021-02-07 20:25

    Try this instead:

    select xmltype(t.xml).extract('//fax/text()').getStringVal() from mytab t
    
    0 讨论(0)
提交回复
热议问题