Using xmldom.appendChild function

Hi , I'm trying to parse 2 xml strings.
I have successfully generated the 2 strings names xmlString1 & xmlString2.
Next I do parsing. This is some part of the code --
p := xmlparser.newParser;
xmlparser.parseClob(p, xmlString1);
xmldoc1 := xmlparser.getDocument(p);
xmlparser.parseClob(p, xmlString2);
xmldoc2 := xmlparser.getDocument(p);
xmldoc := xmldom.newDOMDocument;
xmldom.setVersion(xmldoc,'1.0');
-- create a root element for the new document
rootElement := xmldom.createElement(xmldoc , 'ORDER');
root1Element := xmldom.getDocumentElement(xmldoc1);
root2Element := xmldom.getDocumentElement(xmldoc2);
domNode1 := xmldom.makeNode(rootElement);
domNode2 := xmldom.makeNode(root1Element);
domNode3 := xmldom.makeNode(root2Element);
dbms_output.put_line('hi1');
xmldocnode := xmldom.appendChild(domNode1,domNode2);
dbms_output.put_line('hi2');
While executing I get the 'hi1' but not 'hi2'.
It gives PL/SQL procedure successfully completed. But does nothing from the appendChild function call.
xmldocnode,domNode1,domNode2 have been declared xmldom.DOMNode type.
Thanks
null

Hi , I'm trying to parse 2 xml strings.
I have successfully generated the 2 strings names xmlString1 & xmlString2.
Next I do parsing. This is some part of the code --
p := xmlparser.newParser;
xmlparser.parseClob(p, xmlString1);
xmldoc1 := xmlparser.getDocument(p);
xmlparser.parseClob(p, xmlString2);
xmldoc2 := xmlparser.getDocument(p);
xmldoc := xmldom.newDOMDocument;
xmldom.setVersion(xmldoc,'1.0');
-- create a root element for the new document
rootElement := xmldom.createElement(xmldoc , 'ORDER');
root1Element := xmldom.getDocumentElement(xmldoc1);
root2Element := xmldom.getDocumentElement(xmldoc2);
domNode1 := xmldom.makeNode(rootElement);
domNode2 := xmldom.makeNode(root1Element);
domNode3 := xmldom.makeNode(root2Element);
dbms_output.put_line('hi1');
xmldocnode := xmldom.appendChild(domNode1,domNode2);
dbms_output.put_line('hi2');
While executing I get the 'hi1' but not 'hi2'.
It gives PL/SQL procedure successfully completed. But does nothing from the appendChild function call.
xmldocnode,domNode1,domNode2 have been declared xmldom.DOMNode type.
Thanks
null

Similar Messages

  • XMLDOM.appendChild performance

    Hi All,
    I have a large xml (52,000 messages under the root element). There's about 5 elements under each Message element. Parsing each element takes about 2 minutes which is great. However, when I try to add two more elements under the message element using XMLDOM.appendChild , the execution time goes up to 11 minutes.
    DB Version: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit
    Any ideas on how to make it run faster?
    Is there an issue with XMLDOM.appendChild

    Hi,
    Any ideas on how to make it run faster?
    Is there an issue with XMLDOM.appendChildActually, there's an issue with the whole approach.
    Given your db version, you should stop using DOM and start using binary XMLType and related functionalities.
    Could you describe a little bit more what you want to do? A sample data with expected output would help.
    - What does "parsing" mean to you? Extracting XML data into variables or columns?
    - Do you want to add two more elements under each of the 52000 Messages?
    Here's a glimpse of what you can do :
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    SQL> create table tmp_xml of xmltype;
    Table created.Creating a sample document with 10000 messages...
    SQL> set timing on
    SQL> insert into tmp_xml
      2  select xmlelement("root",
      3           xmlagg(
      4             xmlelement("message",
      5               xmlforest(
      6                 'A'||to_char(level, 'fm09999') as "item1"
      7               , 'B'||to_char(level, 'fm09999') as "item2"
      8               , 'C'||to_char(level, 'fm09999') as "item3"
      9               , 'D'||to_char(level, 'fm09999') as "item4"
    10               , 'E'||to_char(level, 'fm09999') as "item5"
    11               )
    12             )
    13           )
    14         )
    15  from dual
    16  connect by level <= 10000 ;
    1 row created.
    Elapsed: 00:00:00.56
    SQL>Parsing into a relational structure...
    SQL> select x.*
      2  from tmp_xml t
      3     , xmltable(
      4         '/root/message'
      5         passing t.object_value
      6         columns item1 varchar2(6) path 'item1'
      7               , item2 varchar2(6) path 'item2'
      8               , item3 varchar2(6) path 'item3'
      9               , item4 varchar2(6) path 'item4'
    10               , item5 varchar2(6) path 'item5'
    11       ) x
    12  where rownum <= 10 ;
    ITEM1  ITEM2  ITEM3  ITEM4  ITEM5
    A00001 B00001 C00001 D00001 E00001
    A00002 B00002 C00002 D00002 E00002
    A00003 B00003 C00003 D00003 E00003
    A00004 B00004 C00004 D00004 E00004
    A00005 B00005 C00005 D00005 E00005
    A00006 B00006 C00006 D00006 E00006
    A00007 B00007 C00007 D00007 E00007
    A00008 B00008 C00008 D00008 E00008
    A00009 B00009 C00009 D00009 E00009
    A00010 B00010 C00010 D00010 E00010
    10 rows selected.
    Elapsed: 00:00:00.37
    SQL>Appending two more children to each message using XQuery Update (11.2.0.3 only) :
    SQL> update tmp_xml t
      2  set t.object_value =
      3         xmlquery(
      4           'copy $d := .
      5            modify (
      6              for $i in $d/root/message
      7              return insert node $e into $i
      8            )
      9            return $d'
    10          passing t.object_value
    11               ,  xmlconcat(
    12                    xmlelement("item6")
    13                  , xmlelement("item7")
    14                  ) as "e"
    15          returning content
    16         )
    17  ;
    1 row updated.
    Elapsed: 00:00:04.25
    SQL>
    SQL> set long 500
    SQL> set pages 100
    SQL> select object_value from tmp_xml ;
    OBJECT_VALUE
    <root>
      <message>
        <item1>A00001</item1>
        <item2>B00001</item2>
        <item3>C00001</item3>
        <item4>D00001</item4>
        <item5>E00001</item5>
        <item6/>
        <item7/>
      </message>
      <message>
        <item1>A00002</item1>
        <item2>B00002</item2>
        <item3>C00002</item3>
        <item4>D00002</item4>
        <item5>E00002</item5>
        <item6/>
        <item7/>
      </message>
      <message>
        <item1>A00003</item1>
        <item2>B00003</item2>
        <item3>C00003</item3>
        <item4>D00003</item4>
        <item5>E000
    Elapsed: 00:00:00.14Edited by: odie_63 on 7 janv. 2013 00:12

  • Creating XML File Using xmldom Package

    How can I create an XML file from scratch using the PL/SQL xmldom package?
    I want to create an XML file using the xmldom package instead of building the individual tags as strings of VARCHAR2 character data. There is quite a bit of documentation regarding manipulating input XML files using DOM -- but not for creating XML files from scratch given known "tagnames" (<lastName>) and retrieved database "values" ("Smith").
    <person>
    <lastName>Smith</lastName>
    </person>
    Is there any documentation that you can recommend?
    Thank you.

    Here is an example.
    The create_file procedure creates the file.
    The other procedures are generic procs that can be used with any XML.
    PROCEDURE create_file_with_root(po_xmldoc OUT xmldom.DOMDocument,
    pi_root_tag IN VARCHAR2,
                                            po_root_element OUT xmldom.domelement,
                                            po_root_node OUT xmldom.domnode,
                                            pi_doctype_url IN VARCHAR2) IS
    xmldoc xmldom.DOMDocument;
    root xmldom.domnode;
    root_node xmldom.domnode;
    root_element xmldom.domelement;
    record_node xmldom.domnode;
    newelenode xmldom.DOMNode;
    BEGIN
    xmldoc := xmldom.newDOMDocument;
    xmldom.setVersion(xmldoc, '1.0');
    xmldom.setDoctype(xmldoc, pi_root_tag, pi_doctype_url,'');
    -- Create the root --
    root := xmldom.makeNode(xmldoc);
    -- Create the root element in the file --
    create_element_and_append(xmldoc, pi_root_tag, root, root_element, root_node);
    po_xmldoc := xmldoc;
    po_root_node := root_node;
    po_root_element := root_element;
    END create_file_with_root;
    PROCEDURE create_element_and_append(pi_xmldoc IN OUT xmldom.DOMDocument,
    pi_element_name IN VARCHAR2,
                                            pi_parent_node IN xmldom.domnode,
                                            po_new_element OUT xmldom.domelement,
                                            po_new_node OUT xmldom.domnode) IS
    element xmldom.domelement;
    child_node xmldom.domnode;
    newelenode xmldom.DOMNode;
    BEGIN
    element := xmldom.createElement(pi_xmldoc, pi_element_name);
    child_node := xmldom.makeNode(element);
    -- Append the new node to the parent --
    newelenode := xmldom.appendchild(pi_parent_node, child_node);
    po_new_node := child_node;
    po_new_element := element;
    END create_element_and_append;
    FUNCTION create_text_element(pio_xmldoc IN OUT xmldom.DOMDocument, pi_element_name IN VARCHAR2,
    pi_element_data IN VARCHAR2, pi_parent_node IN xmldom.domnode) RETURN xmldom.domnode IS
    parent_node xmldom.domnode;                                   
    child_node xmldom.domnode;
    child_element xmldom.domelement;
    newelenode xmldom.DOMNode;
    textele xmldom.DOMText;
    compnode xmldom.DOMNode;
    BEGIN
    create_element_and_append(pio_xmldoc, pi_element_name, pi_parent_node, child_element, child_node);
    parent_node := child_node;
    -- Create a text node --
    textele := xmldom.createTextNode(pio_xmldoc, pi_element_data);
    child_node := xmldom.makeNode(textele);
    -- Link the text node to the new node --
    compnode := xmldom.appendChild(parent_node, child_node);
    RETURN newelenode;
    END create_text_element;
    PROCEDURE create_file IS
    xmldoc xmldom.DOMDocument;
    root_node xmldom.domnode;
    xml_doctype xmldom.DOMDocumentType;
    root_element xmldom.domelement;
    record_element xmldom.domelement;
    record_node xmldom.domnode;
    parent_node xmldom.domnode;
    child_node xmldom.domnode;
    newelenode xmldom.DOMNode;
    textele xmldom.DOMText;
    compnode xmldom.DOMNode;
    BEGIN
    xmldoc := xmldom.newDOMDocument;
    xmldom.setVersion(xmldoc, '1.0');
    create_file_with_root(xmldoc, 'root', root_element, root_node, 'test.dtd');
    xmldom.setAttribute(root_element, 'interface_type', 'EXCHANGE_RATES');
    -- Create the record element in the file --
    create_element_and_append(xmldoc, 'record', root_node, record_element, record_node);
    parent_node := create_text_element(xmldoc, 'title', 'Mr', record_node);
    parent_node := create_text_element(xmldoc, 'name', 'Joe', record_node);
    parent_node := create_text_element(xmldoc,'surname', 'Blogs', record_node);
    -- Create the record element in the file --
    create_element_and_append(xmldoc, 'record', root_node, record_element, record_node);
    parent_node := create_text_element(xmldoc, 'title', 'Mrs', record_node);
    parent_node := create_text_element(xmldoc, 'name', 'A', record_node);
    parent_node := create_text_element(xmldoc, 'surname', 'B', record_node);
    -- write the newly created dom document into the buffer assuming it is less than 32K
    xmldom.writeTofile(xmldoc, 'c:\laiki\willow_data\test.xml');
    EXCEPTION
    WHEN xmldom.INDEX_SIZE_ERR THEN
    RAISE_APPLICATION_ERROR(-20120, 'Index Size error');
    WHEN xmldom.DOMSTRING_SIZE_ERR THEN
    RAISE_APPLICATION_ERROR(-20120, 'String Size error');
    WHEN xmldom.HIERARCHY_REQUEST_ERR THEN
    RAISE_APPLICATION_ERROR(-20120, 'Hierarchy request error');
    WHEN xmldom.WRONG_DOCUMENT_ERR THEN
    RAISE_APPLICATION_ERROR(-20120, 'Wrong doc error');
    WHEN xmldom.INVALID_CHARACTER_ERR THEN
    RAISE_APPLICATION_ERROR(-20120, 'Invalid Char error');
    WHEN xmldom.NO_DATA_ALLOWED_ERR THEN
    RAISE_APPLICATION_ERROR(-20120, 'Nod data allowed error');
    WHEN xmldom.NO_MODIFICATION_ALLOWED_ERR THEN
    RAISE_APPLICATION_ERROR(-20120, 'No mod allowed error');
    WHEN xmldom.NOT_FOUND_ERR THEN
    RAISE_APPLICATION_ERROR(-20120, 'Not found error');
    WHEN xmldom.NOT_SUPPORTED_ERR THEN
    RAISE_APPLICATION_ERROR(-20120, 'Not supported error');
    WHEN xmldom.INUSE_ATTRIBUTE_ERR THEN
    RAISE_APPLICATION_ERROR(-20120, 'In use attr error');
    WHEN OTHERS THEN
    dbms_output.put_line('exception occured' || SQLCODE || SUBSTR(SQLERRM, 1, 100));
    END create_file;

  • Exception when using  XMLDOM.appendData

    I am trying to create an xml-document containing base64 encoded data by using the xmldom packages on an 8.1.7 DB.
    Everthing works o.k. until I try to append data to an DOMCharacterData Node.This is the point where my function always ends up catching an ORA-29532 java.lang.ClassCastException exception
    I did a lot of research the last few days but did not find any similar cases.
    Does anyone have a solution or can provide hints where to find informations regarding.
    Thank you
    Edmund
    The following function is not exactly the one I am using but it also ends up in an exception!
    FUNCTION fddoc_CreateUploadDoc(pvi_Docname IN VARCHAR2, pvi_Doctype IN VARCHAR2, pvi_Data IN VARCHAR2)
    RETURN xmldom.DOMDocument
    IS
    doc                xmldom.DOMDocument;
    main_node           xmldom.DOMNode;
    root_node           xmldom.DOMNode;
    cmd_node           xmldom.DOMNode;
    document_node          xmldom.DOMNode;
    data_node          xmldom.DOMNode;
    data_cont          xmldom.DOMCharacterData;
    root_elmt           xmldom.DOMElement;
    cmd_elmt          xmldom.DOMElement;
    data_elmt               xmldom.DOMElement;
    BEGIN
         doc := xmldom.newDOMDocument;
         xmldom.setVersion(doc,'1.0');
         -- Root
         main_node := xmldom.makeNode(doc);
         root_elmt := xmldom.createElement(doc, 'ArchiveCommand');
         xmldom.setAttribute(root_elmt, 'version', '1.0');
         root_node := xmldom.appendChild( main_node, xmldom.makeNode(root_elmt));
         -- Command
         cmd_elmt := xmldom.createElement(doc,'ArchiveInsert');
         xmldom.setAttribute(cmd_elmt,'type','HYPARCHIV');
         xmldom.setAttribute(cmd_elmt,'archiveid',1);
         cmd_node := xmldom.appendChild( root_node, xmldom.makeNode(cmd_elmt));
         -- Document
         document_elmt := xmldom.createElement(doc,'Document');
         xmldom.setAttribute(document_elmt,'archiveid',1);
         xmldom.setAttribute(document_elmt, 'id','');
         xmldom.setAttribute(document_elmt, 'name',pvi_Docname);
         xmldom.setAttribute(document_elmt, 'type',pvi_Doctype);
         document_node := xmldom.appendChild(cmd_node, xmldom.makeNode(document_elmt));
         -- Data
         data_elmt := xmldom.createElement(doc,'Data');
         xmldom.setAttribute(data_elmt, 'type',pvi_Doctype);
         data_node := xmldom.appendChild(document_node, xmldom.makeNode(data_elmt));
         data_cont := xmldom.makeCharacterData(data_node);
         xmldom.appendData( data_cont,pvi_Data);/* <- this causes the Exception*/
         RETURN doc;
    END;

    Try something like requestScope or backingBeanScope.

  • Using XMLDOM to process document in XML DB

    I am new to XML and especially XML DB which I however see as an excellent platform on which to base XML based solutions. I have a specific question and apologise beforehand should any of my assumptions be incorrect.
    I wish to create an application which from a number of XML fragments, together with rules governing the behaviour of the fragments (insertion points, overwrite rules etc) are merged together to finally leave me with a complete and valid XML document in XML DB.
    I thought at first that I could use DBMS_XMLDOM to perform this low level processing required. I have however not managed to understand how this can be used together with XMLDB. I am reluctant to use XMLDOM without XMLDB as I am afraid that I will surpass the limits in XML document size apparently imposed by XMLDOM.
    I see a solution where I create a schema based resource in XML DB containing the initial XML structure and then processing any number of the above mentioned fragments to finaly be left with a complete XML document.
    Can I use XMLDOM to do this or am I barking up the wrong tree?
    I would be grateful for any input on techniques that I can apply to perform elementary search/replace/insert on an XML document which I am, from PLSQL, compiling.
    Thanks
    Hans Christiansen

    Hi
    The size of the documents I want to compose are expected vary from a few Kb to 1 or 2 Gb! In a FAQ found somewhere on OTN there was an entry which mentioned that somebody was having trouble with a 50Mb XML document. The recommendation was to use SAX but I am under the impression that this is more useful when the processing is of a more sequential nature.
    The main thread of my question is to gain clarity in the most suitable technique to use when actualy compsing the XML.
    What I want to do is:
    Create resource (XML document) in XML DB.
    Loop through XML fragments together with rules:
    For each fragment process according to rules and insert
    fragment or update existing XML based on fragment contents.
    At the end of the loop the XML document is complete and ready for further processing.
    XMLDOM seems to give me the tools to do this but I am unsure of how to do this and have XMLDOM work directly against the contents in the resource controlled by XML DB (making use of possible indexes and the scalable nature of XMLDB). I get the feeling that if I simply read the XML from XMLDB resource into a DOM document I am still using the memory based representation of the XML until I write the XML back to XMLDB - is this a correct assumption.
    Alternatively is it the functionality offered by XPath, extract(), updatexml() etc. that I should be looking at?
    Does this make my question more understandable?
    Hans

  • Load XLM into pl sql using xmldom

    Hi ,
    I have problems when I use xmldom to retrieve infotmation from xml to storethe information into a table. For the first xml , I can do it , for the second one I have problems ( I can't retrieve the values I need ) and I don't know why. Please don't reply me by providing links , I just would like to have an idea of what is going wrong with the second xml. Thanks in advance.
    It works fine with this one :
    <?xml version="1.0" encoding="windows-1252" ?>
    - <GraydonBeDialogue>
    <TransactionCode>RTB</TransactionCode>
    - <Table ClassTable="Country">
    - <TableEntry>
    <TableLanguage>N</TableLanguage>
    <TableCode>AD</TableCode>
    <TableValue>Andorra</TableValue>
    </TableEntry>
    - <TableEntry>
    <TableLanguage>N</TableLanguage>
    <TableCode>AE</TableCode>
    <TableValue>Verenigde Arabische Emiraten</TableValue>
    </TableEntry>
    - <TableEntry>
    <TableLanguage>N</TableLanguage>
    <TableCode>AF</TableCode>
    <TableValue>Afghanistan</TableValue>
    </TableEntry>
    - <TableEntry>
    <TableLanguage>N</TableLanguage>
    <TableCode>AG</TableCode>
    <TableValue>Antigua en Barbuda</TableValue>
    </TableEntry>
    But it does not work with this one :
    <?xml version="1.0" encoding="windows-1252" ?>
    - <GraydonBeDialogue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com Z:\PROGRAMMATIE\AS400\projecten\XML\GraydonBe\InfoReview\Review.xsd" xmlns="http://www.w3schools.com">
    <Transaction>PDT</Transaction>
    - <GraydonBeInformation>
    - <Default>
    <DateFormat>YYYYMMDD</DateFormat>
    <TimeFormat>HHMMSS</TimeFormat>
    <Currency>EUR</Currency>
    <CountryCode>BE</CountryCode>
    <DecimalSign>.</DecimalSign>
    </Default>
    - <Header>
    <Name>GRAYDON BELGIUM NV /SA</Name>
    <ContentGenerationDate>20050722</ContentGenerationDate>
    <ContentGenerationTime>101110</ContentGenerationTime>
    <Product>REV</Product>
    <ClientNumber>156</ClientNumber>
    </Header>
    - <Body>
    - <Msg48>
    - <MsgHeader>
    <MsgDate>20050712</MsgDate>
    <MsgCode Table="RevDsoMsg">48</MsgCode>
    - <Business>
    <BusinessNumber>0480316383</BusinessNumber>
    <Name>STANLEYBET BELGIQUE SA</Name>
    - <Address>
    <Street>PEGASUSLAAN 5</Street>
    <PostCode>1831</PostCode>
    <City>MACHELEN</City>
    </Address>
    </Business>
    </MsgHeader>
    <SinceDate Format="YYYYMM">200506</SinceDate>
    </Msg48>
    - <Msg123>
    - <MsgHeader>
    <MsgDate>20050711</MsgDate>
    <MsgCode Table="RevDsoMsg">123</MsgCode>
    - <Business>
    <BusinessNumber>0403157932</BusinessNumber>
    <Name>CELANESE NV</Name>
    - <Address>
    <Street>INDUSTRIEWEG 80</Street>
    <PostCode>3620</PostCode>
    <City>LANAKEN</City>
    </Address>
    </Business>
    </MsgHeader>
    - <PreviousCreditAssessement>
    <CreditAssessementAmount>10691000</CreditAssessementAmount>
    </PreviousCreditAssessement>
    - <NewCreditAssessement>
    <CreditAssessementAmount>9706000</CreditAssessementAmount>
    </NewCreditAssessement>
    </Msg123>
    Could you explain me what could be wrong ?
    I am using the same logic for both xml :
    declare
    bnb xmldom.domnodelist;
    l_node xmldom.domnode;
    l_doc xmldom.domdocument;
    begin
    parse_document (l_file_name, doc_in);
    bnb := selected_nodes (doc_in, '/GraydonBeDialogue/Table[@ClassTable="Review"]/TableEntry');
    FOR entry_index IN 0 .. xmldom.getlength (bnb) - 1
    LOOP
    l_node := xmldom.item (bnb, entry_index);
    TableLanguage := trim(xslprocessor.valueof (l_node, 'TableLanguage'));
    TableCode := trim(xslprocessor.valueof (l_node, 'TableCode'));
    TableValue := trim(xslprocessor.valueof (l_node, 'TableValue'));
    -- Treat the data
    .....

    Couple of friendly tips.
    When pasting XML, don't copy it directly from the browser's normal view as that usually inserts a "-" on some lines, which makes it invalid XML when you copy/paste. Either open the XML in something besides a browser or do a View Page Source (or similar) to copy the true XML.
    Use the tag to wrap XML and code to retain formatting as shown in the FAQ (under your sign-in name in the upper right).
    In your first sample XML, the root node is defined as
    <GraydonBeDialogue>
    and in the second it is defined as (ignoring attributes that don't matter to us now)
    <GraydonBeDialogue xmlns="http://www.w3schools.com">
    This means the second XML resides in a default namespace and so to access any/all nodes that reside in this namespace, you must provide that namespace to the extract method.
    For many Oracle based functions that take an Xpath as a parm, Oracle has the next parm defined as the namespace.  This allows you to pass in the namespace associated to the XML nodes.  With default namespaces, it does add a twist as you have to make up a namespace prefix for the Xpath/namespace declaration so that the engine knows the nodes reside in a namespace (be it default) instead of not residing in a namespace.  Here's a little something I wrote up on this
    http://anononxml.blogspot.com/2010/06/xml-parsing-with-default-namespaces-via.html
    I prefer now to use XMLType when parsing XML in PL/SQL as a bit more flexible/easier to code.
    Without seeing what you hid in
    selected_nodes
    it is hard to say exactly where your problem is but hopefully that gives you a start.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • INSERTION OF XML DATA INTO THE TABLE USING XMLDOM

    hello,
    i am using XMLDOM to insert the data into the table
    i am using different function of it.
    but i am facing the problem to retrive the the multiple entry.
    like in my example i have two entry of the ' po number '
    & i am using the function
    dbms_xmldom.item(l_nodelist, 0)
    i which i have to pass index no.
    & through this i am getting only single entry according to the index no.
    Example on which i am working is
    declare
    l_xml_data CLOB;
    l_xml_doc dbms_xmldom.domdocument;
    l_nodelist dbms_xmldom.DOMNodeList;
    l_node dbms_xmldom.domnode;
    l_xmltype XMLTYPE;
    l_po_num VARCHAR2(30);
    l_cust_ord VARCHAR2(30);
    l_item_code VARCHAR2(30);
    begin
    l_xml_data := '<?xml version="1.0" encoding="UTF-8"?>
    <!--DOCTYPE MobileInventoryResponse SYSTEM "MobileInventoryResponse.dtd"-->
    <MobileInventoryResponse>
         <message>
              <message-header>
                   <message-id>16244182</message-id>
                   <transaction-name>ship-advice</transaction-name>
                   <partner-name>cbeyond</partner-name>
                   <source-url>http://www.brightpoint.com</source-url>
                   <create-timestamp>20080826150709</create-timestamp>
                   <response-request>1</response-request>
              </message-header>
              <ship-advice>
                   <header>
                        <customer-id>297859</customer-id>
                        <shipment-information>
                             <ship-first-name>RA_13Aug_1</ship-first-name>
                             <ship-last-name>MIND</ship-last-name>
                             <ship-address1>test</ship-address1>
                             <ship-city>test</ship-city>
                             <ship-state>VA</ship-state>
                             <ship-post-code>22102-4931</ship-post-code>
                             <ship-country-code>US</ship-country-code>
    <ship-phone1>0040726335068</ship-phone1>
    <ship-email>[email protected]</ship-email>
    <ship-via>FX01</ship-via>
    <ship-request-date>20080826</ship-request-date>
    <ship-request-warehouse>CBY1</ship-request-warehouse>
    </shipment-information>
    <purchase-order-information>
    <purchase-order-number>380928</purchase-order-number>
    <purchase-order-number>380929</purchase-order-number> ----modi by Ananda Dubey
    <account-description/>
    <purchase-order-amount>0.0</purchase-order-amount>
    <currency-code>USD</currency-code>
    </purchase-order-information>
    <order-header>
    <customer-order-number>0002759</customer-order-number>
    <customer-order-date>20080826</customer-order-date>
    <order-sub-total>19.0</order-sub-total>
    <order-discount>0.0</order-discount>
    <order-tax1>0.0</order-tax1>
    <order-tax2>0.0</order-tax2>
    <order-tax3>0.0</order-tax3>
    <order-shipment-charge>18.0</order-shipment-charge>
    <order-total-net>0.0</order-total-net>
    <order-status>Completed</order-status>
    <order-type/>
    <brightpoint-order-number>35028788</brightpoint-order-number>
    <warehouse-id>CBY1</warehouse-id>
    <ship-date>20080826</ship-date>
    </order-header>
    </header>
    <detail>
    <line-item>
    <line-no>1</line-no>
    <item-code>SKU1</item-code>
    <universal-product-code>0</universal-product-code>
    <ship-quantity>1.0</ship-quantity>
    <unit-of-measure>EA</unit-of-measure>
    <serial-list>
    <serial-numbers>
    <esn>TIMI000013</esn>
    </serial-numbers>
    </serial-list>
    <line-status/>
    <base-price>0.0</base-price>
    <line-discount>0.0</line-discount>
    <line-tax1>0.0</line-tax1>
    <line-tax2>0.0</line-tax2>
    <line-tax3>0.0</line-tax3>
    <bill-of-lading>929406733828</bill-of-lading>
    <scac>FX01</scac>
    </line-item>
    </detail>
    </ship-advice>
    <transactionInfo>
                   <eventID>16244182</eventID>
              </transactionInfo>
         </message>
    </MobileInventoryResponse>';
    l_xml_doc := dbms_xmldom.newDomDocument(l_xml_data);
    -- Method 1 to get data
    l_nodelist := dbms_xmldom.getelementsbytagname(l_xml_doc, 'purchase-order-number');
    l_node := dbms_xmldom.item(l_nodelist, 0); -- gets first item from list
    l_po_num := dbms_xmldom.getnodevalue(dbms_xmldom.getfirstchild(l_node));
    dbms_output.put_line(l_po_num);
    l_nodelist := dbms_xslprocessor.selectnodes(dbms_xmldom.makenode(l_xml_doc),
    '/MobileInventoryResponse/message/ship-advice/detail/line-item/item-code');
    l_node := dbms_xmldom.item(l_nodelist, 0); -- gets first item from list
    l_item_code := dbms_xmldom.getnodevalue(dbms_xmldom.getfirstchild(l_node));
    dbms_output.put_line(l_item_code);
    l_xmltype := XMLTYPE(l_xml_data);
    l_cust_ord := l_xmltype.extract('/MobileInventoryResponse/message/ship-advice/header/order-header/customer-order-number/text()').getStringVal();
    dbms_output.put_line(l_cust_ord);
    dbms_xmldom.freeDocument(l_xml_doc);
    end;
    /

    In the following code
    l_nodelist := dbms_xmldom.getelementsbytagname(l_xml_doc, 'purchase-order-number');
    l_node := dbms_xmldom.item(l_nodelist, 0); -- gets first item from listYou need to understand what the second parm on the .item call does. See [dbms_xmldom.item|http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_xmldom.htm#i1126138]
    The nodelist is a 0 based array of information and you are only requesting to pull the node info in the first array position. So to get the info in the second array position, you need to use ", 1)". You can also use .getLength and a loop to parse through everything in the node list.

  • Using iPad mail program I have a draft of an email. I attempted to "cancel" and "delete draft" but it is still on my screen even after shutting down and restarting. How do I exit so that I can use other mail functions?

    Using iPad mail program I have a draft of an email. I have attempted to "cancel" this and "delete draft" but the email stays on my screen. How can I exit this so that I can use other email functions?

    Try closing the Mail app completely and see if it works properly when you re-open the app : from the home screen (i.e. not with the Mail app 'open' on-screen) double-click the home button to bring up the taskbar, then press and hold any of the apps on the taskbar for a couple of seconds or so until they start shaking, then press the '-' in the top left of the Mail app to close it, and touch any part of the screen above the taskbar so as to stop the shaking and close the taskbar.
    If that doesn't work also do a reset : press and hold both the sleep and home buttons for about 10 to 15 seconds (ignore the red slider), after which the Apple logo should appear - you won't lose any content, it's the iPad equivalent of a reboot.

  • How to use standard java functions in a XSLT mapping

    Hi All,
    I wish to use a standard java function in a XSLT mapping, The issue is either i am giving incorrect namespace which is used to invoke the function or the signature of the function call is incorrect, I have read all the links in http://help.sap.com, and i know <b> one can enhance a XSLT mapping by writing one's own java code and thereby using java standard functions </b>, but the requirement is such that i need to try and use java standard function in XSLT mapping itself.
    Please refer to the sample code below:
    <?xml version="1.0" encoding="UTF-8"?>
      <xsl:stylesheet version="1.0"  
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:javamap="java:java.lang.String">
    <xsl:output method="text"/>
    <xsl:template match="/">
    <xsl:variable name="input" select="Title">
    <xsl:if test="function-available('javamap:toUpperCase')">
    <xsl:value-of select="javamap:toUpperCase($input)"/>
    </xsl:if>
    Author:<xsl:value-of select="Author"/>
    </xsl:template>
    </xsl:stylesheet>
    error encountered is: Illegal number or type of arguments.
    please reply if you have tried a similar scenario in SAP XI.
    Thanks & Regards,
    Varun

    Hi Varun,
        First of all i want to tell you that as per the documentation you can only call the static function inside xslt mapping. Your toUpperCase method is a non static function.
    What i am getting is that you have an element called Author and you want to convert its value into uppercase.
    you can write your own user defined function which is static.
    Signature of your java method :
    public static string toUpperCase(String Author,Map inputparam)
    try this xslt map.
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:javamap="java:JavaProgram">
         <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
         <xsl:param name="Author">
                 <xsl:value-of select="//Author_name"/>
         </xsl:param>
         <xsl:param name="inputparam" />
         <xsl:template match="/">
         <Author>
                 <xsl:if test="function-available('javamap:toUpperCase')">
                  <xsl:value-of select="javamap:toUpperCase($Author,$inputparam)"/>
                 </xsl:if>
         </Author>
         </xsl:template>
    </xsl:stylesheet>
    Hope this will work.
    Thanks and Regards
    Vishal Kumar

  • Derive found flag in SQL with where clause using TABLE(CAST function

    Dear All,
    Stored procedure listEmployees
    ==========================
    CREATE OR REPLACE TYPE STRING_ARRAY AS VARRAY(8000) OF VARCHAR2(15);
    empIdList STRING_ARRAY
    countriesList STRING_ARRAY
    SELECT EMP_ID, EMP_COUNTRY, EMP_NAME, FOUND_FLAG_
    FROM EMPLOYEE WHERE
    EMP_ID IN
    (SELECT * FROM TABLE(CAST(empIdList AS STRING_ARRAY))
    AND EMP_COUNTRY IN
    (SELECT * FROM TABLE(CAST(countriesList AS STRING_ARRAY))
    =================
    I have a stored procedure which lists the employees using above simple query.
    Here I am using table CAST function to find the list of employees in one go
    instead of looping through each and every employee
    Everything fine until requirements forced me to get the FOUND_FLAG as well.
    Now I wanted derive the FOUND_FLAG by using rownum, rowid, decode functions
    but I was not successful
    Can you please suggest if there is any intelligent way to say weather the
    row is found for given parameters in the where clause?
    If not I may have to loop through each set of empIdList, countriesList
    and find the values individually just to set a flag. In this approach I can’t use
    the TABLE CAST function which is efficient I suppose.
    Note that query STRING_ARRAY is an VARRAY. It is very big in size and this procedure
    suppose to handle large sets of data.
    Thanks In advance
    Regards
    Charan
    Edited by: kmcharan on 03-Dec-2009 09:55
    Edited by: kmcharan on 03-Dec-2009 09:55

    If your query returns results, you have found them... so your "FOUND" flag might be a constant,...

  • How to use the Table Function defined  in package in OWB?

    Hi,
    I defined a table function in a package. I am trying to use that in owb using Table function operator. But I came to know that, owb R1 supports only standalone table functions.
    Is there any other way to use the table function defined in a package. As like we create synonyms for functions, is there any other way to do this.
    I tryed to create synonyms, it is created. But it is showing compilation error. Finally I found that, we can't create synonyms for functions which are defined in packages.
    Any one can explain it, how to resolve this problem.
    Thank you,
    Regards
    Gowtham Sen.

    Hi Marcos,
    Thank you for reply.
    OWB R1 supports stand alone table functions. Here what I mean is, the table fucntion which is not inculded in any package is a stand alone table function.
    for example say sample_tbl_fn is a table function. It is defined as a function.It is a stand alone function. We call this fucntion as "samp_tbl_fn()";
    For exampe say sample_pkg is a package. say a function is defined in a package.
    then we call that function as sample_pkg.functionname(); This is not a stand alone function.
    I hope you understand it.
    owb supports stand alone functions.
    Here I would like to know, is there any other way to use the functions which are defined in package. While I am trying to use those functions (which are defined in package -- giving the name as packagename.functionname) it is throwing an error "Invalid object name."
    Here I would like know, is there any other way to use the table functions which are defined in a package.
    Thank you,
    Regards,
    Gowtham Sen.

  • How do I use the print function to output a numeric variable with a fixed amount of leading zeroes

    I need to create an output from a T-SQL query that picks a numeric variable and uses the print function to output with leading zeroes if it is less than three characters long when converted to string.  For example if the variable is 12 the output should
    be 012 and if the variable is 3 the output should be 003.
    Presently the syntax I am using is PRINT STR(@CLUSTER,3) .  But if @CLUSTER which is numeric is less than three characters I get spaces in front.
    Please help!

    >> I need to create an output from a T-SQL query .. <<
    NO! NO! In RDBMS, we have a presentation layer that handles displays. We do not ever do it in the database. This is fundamental. But more than that, the purpose of PRINT is for debugging in T-SQL and never for output.
    You are still writing 1960's COBOL or BASIC, but you want to to it in SQL.  You probably picked the wrong data type (a numeric that should be a string) and are trying to repair your design error.  
    --CELKO-- Books in Celko Series for Morgan-Kaufmann Publishing: Analytics and OLAP in SQL / Data and Databases: Concepts in Practice Data / Measurements and Standards in SQL SQL for Smarties / SQL Programming Style / SQL Puzzles and Answers / Thinking
    in Sets / Trees and Hierarchies in SQL

  • TS1398 I have an iPad mini, because of my work network firewalls I am not able to use the airprint function to print. I was told you can direct connect to a printer. I am not sure how as I have not seen any cables for a lightning connection to a printer c

    I have an iPad mini, I am connected to my work wireless connection. My printer also is on the same wireless network, however I am not able to print to my airprint enabled printer through this wireless connection. Is there a way to direct connect to the printer via a cable ?
    I am missing something here on the connection. I am thinking possibly a firewall here at work will not allow me to use the airprint function. Help ?

    There is no support for wired printing.
    It is probably a firewall issue, possibly where all inbound communications are blocked. Since you're at work, I'd call your work IT department and find out from them what you can/can't do.

  • Is there any way to use copy from function in cProject Project creation.

    Hi,
    Kinldy suggest if any one have idea to use copy from function in cProject while creating Project in cProject.
    We have copy from function in our material creation and BOM, Is there any way to copy the old project and we can take the same for new project as a Paste entire structure.
    Please share with me if you have any ideas for the same.
    Thanls in advance for your help.
    Thanks & Regards.
    Raj

    Hi,
    please see
    [http://help.sap.com/saphelp_ppm50/helpdata/en/4a/6431a343946ba2e10000000a421937/frameset.htm|http://help.sap.com/saphelp_ppm50/helpdata/en/4a/6431a343946ba2e10000000a421937/frameset.htm]
    there the third case ("Based on an operational project ...")
    Kind regards,
       Florian

  • How can I use Seeburger java functions on SAP XI's user defined functions?

    Hi All,
    As my title implies; how can I use Seeburger java functions on SAP XI's user defined functions?  I've tried searching over the net in tutorials regarding this topic but I failed to find one; can someone provide me information regarding my question? thanks very much.
    best regards,
    Mike

    Hi Mike !
    You should check your documentation about which java classes you need to reference in the "import" section of your UDF. And also deploy the java classes into the java stack or include them as a imported archive in integration repository...it should be stated in the seeburger documentation.
    What kind of functions are you trying to use?
    Regards,
    Matias.

Maybe you are looking for

  • Iphone 5 charging but not syncing with Itunes

    Have searched thru the posts and have done practically everything I could find and suggusted (inlcuding upgrading, a full reinstall of itunes and a simple reset of iphone (vs a restore which I cannot do as phone doesnt show in devices)  . .but still

  • Tax G/L account error in invoice

    Hi friends, We have two scenario ie sales from DC(distribution center) and sales from MFG plant. the tax G/L account are different for both but after analysis in FTXP and OB40 for our tax procedure  I found the G/L account for MFG plant only. I am no

  • Tabstrip control can not switch (Do not respond when focus on field of subscreen)

    Hi Colleagues,      I have met with a very strange question, which worries me a lot these days. Would you please help me with it?      The problem is like this:      1. In normal case, I can switch to another tab when I click it. Please see picture i

  • AWT Popup Menu in Fullscreen Exclusive + JOGL

    Our application runs in Fullscreen Exclusive mode and uses JOGL. We want the user to be able to access right-click Popup menus like in other applications. (Obviously, this isn't a game; but I figured I'd post here because game developers are the only

  • Forwarded call to cell phone is not displayed with...

    I have a subscription allowing me to let calls to my skype online-number be forwarded to my cell phone. Now, if someone calls my skype number and is forwarded to my cell phone, my cell phone only shows "unknown". This is also the case, if the person