Embedding BLOB in XML

Hi,
We are trying to convert our table data to xml using SQLX functions / DBMS_XMLGEN package ..Some of the tables have BLOB fields in them and these Oracle utilities do not handle BLOB fields well..
I found some techniques like converting BLOB to hex and exporting into xml , etc but they all have limitations...Is there some standard approach to export BLOBs into a xml document ?
Thnx,
Sriram.

XML supports many datatypes including Base64 type coding (and others) for embedding things like binary data (i.e. what you should be looking at having stored in BLOBS).
There are packages in Oracle that will all you to convert you BLOB data to Base 64. Packages like UTL_ENCODE will achieve such things (if I recall correctly you'll have to convert the BLOB to RAW first as an intermediary step).

Similar Messages

  • Could we use embedded SQL for XML in .pc ?

    Hi,
    Can we use embedded SQL for XML in .pc ?
    <1> assume we have run SQL statements in Oracle9i:
    SQL>create table MY_XML_TABLE
    (Key1 NUMBER,
    Xml_Column SYS.XMLTYPE);
    SQL>insert into MY_XML_TABLE(key1, Xml_Column) values
    (1, SYS.XMLTYPE.CREATEXML
    ('<book>
    <chapter num="1">
    <text>This is the my text</text>
    </chapter>
    <book>')
    <2> Could we directly translate it in .pc as usually:
    <outlined, not exactly)
    int emp_number = 1;
    XML_Data emprec; /* ?????? */
    EXEC SQL SELECT M.Xml_Column.GETCLOBVAL() as XML_Data
    INTO :emprec INDICATOR :emprec_ind
    FROM MY_XML_TABLE M
    WHERE Key1 = :emp_number;
    Thanks
    MJ

    reply by myself.
    No problem!!
    ===============================
    int emp_number = 1;
    struct emprec{
    char feature[1280]
    EXEC SQL SELECT M.Xml_Column.GETCLOBVAL() as XML_Data
    INTO :emprec INDICATOR :emprec_ind
    FROM MY_XML_TABLE M
    WHERE Key1 = :emp_number;

  • XML with embedded BLOBs 4000 Character Limit

    Hi All
    My database proc (PROCEDURE pr_xml (pi_xml IN XMLTYPE)) is being passed an XMLTYPE object as a parameter (from .NET). This XMLTYPE doc contains image data (in HEX format) that I need to store in a BLOB column. I can do this OK if the image is &lt; 4000 characters long. If it is longer than this I have a problem. I have tried both the following queries to get the BLOB data :
    proc definition is
    1) select image
    FROM XMLTABLE ('/DocumentElement/pic_record' PASSING xmltype('
    &lt;DocumentElement&gt;
    &lt;pic_record&gt; &lt;Pic&gt;FFD8FFE000104A46494600010101006000600000FFE10066 &hellip;&hellip;&hellip;&hellip;&lt;/Pic&gt;
    &lt;/pic_record&gt;
    &lt;/DocumentElement&gt;
    ') COLUMNS image VARCHAR2(4000) PATH 'Pic')
    2) SELECT extractvalue(column_value,'Pic')
    FROM table (xmlsequence(extract(xmltype('
    &lt;DocumentElement&gt;
    &lt;pic_record&gt;
    &lt;pic_record&gt; &lt;Pic&gt;FFD8FFE000104A46494600010101006000600000FFE10066 &hellip;&hellip;&hellip;&hellip;&lt;/Pic&gt;
    &lt;/pic_record&gt;
    &lt;/DocumentElement&gt;
    '),'/DocumentElement/pic_record/Pic')))
    Using 1) I expected to be able to declare the COLUMN as a BLOB (VARCHAR2(4000)-above) but the only types you can use are NUMBER and VARCHAR.
    Using 2) the extractValue function complains above 4000 characters.
    Does anyone have any experience of this, or any suggestions. Thanks
    Tim

    Hi,
    I have similar question. I got an image in an XML docuemnt. I don't know how to load this into a BLOB column. The XML was originally generated from a BLOB column using DBMS_XMLQuery.GetXML Pkg. The photo get converted inside XML doc as below
    e.g. FFD8FFE000104A464946000101000001 ......
    i used EXTRACT and getblobval() and able to load back to the BLOB column . but it does not seems a valid image after loading . when I save the contents to a file and open it is showing me all the same charectors and the first line contain as <?xml version="1.0" encoding="WINDOWS-1252"?>
    It seems that the photo got converted to Hex format while XML is generated.
    please guide how to convert the image back to the original format ? or any alternative.
    Thanks
    Mano

  • Not able to Read Blob ( BlobDomain) Xml Data from DB

    I am trying to read a BLOB file from Data base with the below code . However , i am facing 2 challenges - which i need ur help..
    1. the data is not in readable format , may be i am missing some more code or encoding somewhere . ( this is how data is printing-- �B�...........)
    2. Throwing an exception in the end
    The Blob Data types appears as BlobDomain in the entity defination . My jdev is 11.1.1.5
    +{+
    +..............+
    oracle.jbo.domain.BlobDomain  blobDomainXml = (BlobDomain)r.getAttribute("Document");
    System.out.println(" XML Out Put = "blobDomainXml);+
    +}+
    public ViewObject getBlobObject(){
    return (ViewObjectImpl)findViewObject("getBlobObject1");
    below is exception after the call ---
    Caused by: java.lang.NullPointerException
         at oracle.jbo.server.ViewRowSetIteratorImpl.getViewObject(ViewRowSetIteratorImpl.java:238)
         at oracle.jbo.server.ViewRowSetIteratorImpl.getSyncLock(ViewRowSetIteratorImpl.java:178)
         at oracle.jbo.server.ViewRowSetIteratorImpl.hasNext(ViewRowSetIteratorImpl.java:1904)
         at com.stryker.gtc.view.bean.LoginPageName.getBlob(LoginPageName.java:243)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:597)
         at com.sun.el.parser.AstValue.invoke(Unknown Source)
         at com.sun.el.MethodExpressionImpl.invoke(Unknown Source)
         at org.apache.myfaces.trinidadinternal.taglib.util.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:53)

    The Blob xml has used some encoding . If i use the below italic code in main class , i can get the proper xml . However , It uses the blob resultset but I get exception if i try with ADF blob domain .
    below is the code in a simple main method class and gives me the desired xml .
    ResultSet rset = statement.executeQuery("Select * from XML_DOCUMENT where DOCUMENT_ID=(Select DOCUMENT_ID from DOCUMENT_DLV_MSG_REF where MESSAGE_GUID = (Select MESSAGE_GUID from DLV_MESSAGE \n" +
    "where CIKEY = (Select CIKEY from CUBE_INSTANCE where CMPST_ID='1931038')))");
    +try {+
    XMLDOMImplementation domimpl = new XMLDOMImplementation();
    +while (rset.next()) {+
    BinXMLProcessor proc =  BinXMLProcessorFactory.createProcessor()  ;
    BinXMLStream inpbin = proc.createBinXMLStream(rset.getBlob("DOCUMENT"));
    BinXMLDecoder dec = inpbin.getDecoder();
    InfosetReader xmlreader = dec.getReader();
    XMLDocument doc = (XMLDocument)domimpl.createDocument(xmlreader);
    doc.print(System.out);
    +}+
    +} catch (Exception e) {+
    System.out.println(" Exception ="e);+
    +}+
    But , In ADF we have Blob Domian in the entity defination , auto generated ...
    Row r = iter.next();
    oracle.jbo.domain.BlobDomain blob = (*BlobDomain*)r.getAttribute("Document");
    try
    XMLDOMImplementation domimpl = new XMLDOMImplementation();
    BinXMLProcessor proc = BinXMLProcessorFactory.createProcessor() ;
    BinXMLStream inpbin = proc.createBinXMLStream(blob.getInputStream());
    BinXMLDecoder dec = inpbin.getDecoder();
    InfosetReader xmlreader = dec.getReader();
    now in the above higlighted code I get java.lang.IllegalArgumentException . I do not find a way to convert BlobDomain to blob . even no decoder in blob Domain .
    May be you can help ..
    Edited by: Amitava Biswas on Sep 12, 2012 11:13 AM

  • Unable to convert BLOB to XML using XMLTYPE

    Hello (XML) Experts
    I need your help with manipulating a BLOB column containing XML data - I am encountering the following error:
    ORA-31011: XML parsing failed
    ORA-19202: Error occurred in XML processing
    LPX-00200: could not convert from encoding UTF-8 to WINDOWS-1252
    Error at line 1
    ORA-06512: at "SYS.XMLTYPE", line 283
    I am on Windows 7 64 bit, Oracle 11.2.0.3 64 bit and database character set is WE8MSWIN1252, NLS_LANG is set to AMERICAN_AMERICA.AL32UTF8. The BLOB column contains the following XML data:
    <?xml version="1.0" encoding="utf-8"?>
    <Root CRC="-4065505">
      <Header Converted="0">
        <Version Type="String" Value="512" />
        <Revision Type="String" Value="29" />
        <SunSystemsVersion Type="String" Value="" />
        <Date Type="String" Value="20080724" />
        <Time Type="String" Value="165953" />
        <DAG Type="String" Value="" />
        <ChkID Type="String" Value="" />
        <FormType Type="String" Value="1" />
        <DB Type="String" Value="AllBusinessUnits" />
        <FuncID Type="String" Value="SOE" />
        <Status Type="String" Value="" />
        <FileType Type="String" Value="SFL" />
        <Descriptions>
          <Default Type="String" Value="Sales Order Entry" />
          <L01 Type="String" Value="Sales Order Entry" />
          <L33 Type="String" Value="Saisie commande client" />
          <L34 Type="String" Value="Entrada de órdenes de venta" />
          <L39 Type="String" Value="Inserimento ordine di vendita" />
          <L49 Type="String" Value="Aufträge erfassen" />
          <L55 Type="String" Value="Entrada de pedido de venda" />
          <L81 Type="String" Value="å?—注オーダー入力" />
          <L86 Type="String" Value="销售订å?•å½•å…¥" />
          <L87 Type="String" Value="銷售訂單錄入" />
        </Descriptions>
      </Header>
    <FormDesignerAppVer Type="String" Value="5.1" SFLOnly="1" />
    </Root>I am using the XMLTYPE constructor and passing in the BLOB column and the character set id of the XML data stored in the BLOB column in order to extract and update a node in the XML as follows:
    select xmltype(srce_form_detail,873) from SRCE_FORM where 873 above corresponds to the utf-8 encoding of the XML data in the BLOB column i.e. AL32UTF8, but this results in the above error.
    I have also tried converting the BLOB to a CLOB first as below where BLOB2CLOB is a function that converts the BLOB to a CLOB:
    select xmltype(BLOB2CLOB(srce_form_detail)).EXTRACT('/Root/Header/DB').getStringVal() XMLSrc  from SRCE_FORM;This results in the following error:
    ORA-31011: XML parsing failed
    ORA-19202: Error occurred in XML processing
    LPX-00210: expected '<' instead of '¿'
    Error at line 1
    ORA-06512: at "SYS.XMLTYPE", line 272
    ORA-06512: at line 1
    Looking at the XML in the BLOB I noticed that it contains a BOM(byte order mark) and this is causing the XML parsing to fail and I don't know how to deal with it and I don't want to simply SUBSTR it out.
    What I am trying to achieve is to extract the contents of the DB node in the XML and depending on its value I need to update the 'Value' part of that node. I am stuck at the point of extracting the contents of the DB node.
    I hope I have provided enough information and I would appreciate any suggestions on how best to resolve this - my XML knowledge is very limited so I would appreciate any help.
    Regards,
    Mohinder

    Hi Marc
    Thanks for your response.
    You are correct that the blob contains Japanese and Chinese characters but I was expecting that using the XMLTYPE constructor would convert the character set albeit with some data loss or then not display the Chinese and Japanese characters correctly.
    It seems to me that XMLTYPE is not handling/interpreting the BOM contained in the BLOB since even converting the BLOB to CLOB is resulting in an error. If I use SUBSTR and ignore the BOM to extract the XML from the BLOB then it works and as expected the Chinese and Japanese characters are not displayed correctly, they are displayed as '¿' corresponding to the lines beginning with L81, L86 & L87 , see below:
    select xmltype(SUBSTR(BLOB2CLOB(srce_form_detail),4)) from SRCE_FORM
    <?xml version="1.0" encoding="utf-8"?>
    <Root CRC="-4065505">
      <Header Converted="0">
        <Version Type="String" Value="512" />
        <Revision Type="String" Value="29" />
        <SunSystemsVersion Type="String" Value="" />
        <Date Type="String" Value="20080724" />
        <Time Type="String" Value="165953" />
        <DAG Type="String" Value="" />
        <ChkID Type="String" Value="" />
        <FormType Type="String" Value="1" />
        <DB Type="String" Value="AllBusinessUnits" />
        <FuncID Type="String" Value="SOE" />
        <Status Type="String" Value="" />
        <FileType Type="String" Value="SFL" />
        <Descriptions>
          <Default Type="String" Value="Sales Order Entry" />
          <L01 Type="String" Value="Sales Order Entry" />
          <L33 Type="String" Value="Saisie commande client" />
          <L34 Type="String" Value="Entrada de ¿¿rdenes de venta" />
          <L39 Type="String" Value="Inserimento ordine di vendita" />
          <L49 Type="String" Value="Auftr¿¿ge erfassen" />
          <L55 Type="String" Value="Entrada de pedido de venda" />
          <L81 Type="String" Value="¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿" />
          <L86 Type="String" Value="¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿" />
          <L87 Type="String" Value="¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿" />
        </Descriptions>
      </Header>Can you please let me know how I can extract the binary dump of the BLOB and post it on the forum as I don't know how to do this. Below is snippet of the hexadecimal dump, that includes the BOM. I can post the full hexadecimal dump if this can help you to reproduce the error ?
    EFBBBF3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D227574662D38223F3E0D0A3C526F6F74204352433D222D34303635353035223E0D0A20203C48656164657220436F6E7665727465643D2230223E0D0A202020203C56657273696F6E20547970653D22537472696E67222056616C75653D2235313222202F3E0D0A202020203C5265766973696F6E20547970653D22537472696E67222056616C75653D22323922202F3E0D0A202020203C53756E53797374656D7356657273696F6E20547970653D22537472696E67222056616C75653D2222202F3E0D0A202020203C4461746520547970653D22537472696E67222056616C75653D22323030383037323422202F3E0D0A202020203C54696D6520547970653D22537472696E67222056616C75653D2231363539353322202F3E0D0A202020203C44414720547970653D22537472696E67222056616C75653D2222202F3E0D0A202020203C43686B494420547970653D22537472696E67222056616C75653D2222202F3E0D0A202020203C466F726D5479706520547970653D22537472696E67222056616C75653D223122202F3E0D0A202020203C444220547970653D22537472696E67222056616C75653D22416C6C427573696E657373556E69747322202F3E0D0A202020203C46756E63494420547970653D22537472696E67222056616C75653D22534F4522202F3E0D0A202020203C53746174757320547970653D22537472696E67222056616C75653D2222202F3E0D0A202020203C46696C655479706520547970653D22537472696E67222056616C75653D2253464C22202F3E0D0A202020203C4465736372697074696F6E733E0D0A2020202020203C44656661756C7420547970653D22537472696E67222056616C75653D2253616C6573204F7264657220456E74727922202F3E0D0A2020202020203C4C303120547970653D22537472696E67222056616C75653D2253616C6573204F7264657220456E74727922202F3E0D0A2020202020203C4C333320547970653D22537472696E67222056616C75653D2253616973696520636F6D6D616E646520636C69656E7422202F3E0D0A2020202020203C4C333420547970653D22537472696E67222056616C75653D22456E747261646120646520C3B37264656E65732064652076656E746122202F3E0D0A2020202020203C4C333920547970653D22537472696E67222056616C75653D22496E736572696D656E746F206F7264696E652064692076656E6469746122202F3E0D0A2020202020203C4C343920547970653D22537472696E67222056616C75653D224175667472C3A4676520657266617373656E22202F3E0D0A2020202020203C4C353520547970653D22537472696E67222056616C75653D22456E74726164612064652070656469646F2064652076656E646122202F3E0D0A2020202020203C4C383120547970653D22537472696E67222056616C75653D22E58F97E6B3A8E382AAE383BCE38380E383BCE585A5E58A9B22202F3E0D0A2020202020203C4C383620547970653D22537472696E67222056616C75653D22E99480E594AEE8AEA2E58D95E5BD95E585A522202F3E0D0A2020202020203C4C383720547970653D22537472696E67222056616C75653D22E98AB7E594AEE8A882E596AEE98C84E585A522202F3E0D0A202020203C2F4465736372697074696F6E733E0D0A20203C2F4865616465723E0D0A20203C466F726D3E0D0A202020203C4372656174696F6E4C616E6720547970653D22537472696E67222056616C75653D223031222053464C4F6E6C793D223122202F3E0D0A202020203C416374696F6E733E0D0A2020202020203C5065726D697373696F6E73202F3E0D0A202020203C2F416374696F6E733E0D0A202020203C48656C70202F3E0D0A202020203C466F6E743E0D0A2020202020203C446566466F6E7453697A6520547970653D22496E7465676572222056616C75653D2238222053464C4F6E6C793D223122202F3E0D0A2020202020203C466F6E743E0D0A20202020202020203C4C616E677561676520547970653D22537472696E67222056616C75653D2244656661756C7422202F3E0D0A20202020202020203C466F6E744E616D6520547970653D22537472696E67222056616C75653D224D532053616E7320536572696622202F3E0D0A2020202020203C2F466F6E743E0D0A2020202020203C466F6E743E0D0A20202020202020203C4C616E677561676520547970653D22537472696E67222056616C75653D22383122202F3E0D0A20202020202020203C466F6E744E616D6520547970653D22537472696E67222056616C75653D224D5320554920476F7468696322202F3E0D0A2020202020203C2F466F6E743E0D0A202020203C2F466F6E743E0D0A202020203C436F6E74726F6C733E0D0A2020202020203C436F6E74726F6C3E0D0A20202020202020203C436F6E74726F6C5479706520547970653D22496E746567657222204644496E743D2231222056616C75653D223122202F3E0D0A20202020202020203C446973706C61795479706520547970653D22537472696E6722204644496E743D2230222056616C75653D22466F726D2057696E646F77222053464C4F6E6C793D223122202F3E0D0A20202020202020203C43617074696F6E20547970653D22537472696E6722204644496E743D2230222056616C75653D2253597C3F7C55547C3F7C3F3F3F3F3F3F22202F3E0DThe XML I posted so far is actually truncated as the full XML is quite big but I showed the beginning of it as this is the section I believe that is not being handled properly. Furthermore I am able to write the BLOB out to a file successfully without any errors using DBMS_LOB & UTL_FILE.PUT_RAW and this seems to handle the BOM without any issues but what I really need to do is read a single node in the XML and update it directly preferably using XMLTYPE directly with the BLOB.
    I would welcome your suggestions on how best to read a single node and update it when the XML is contained in a BLOB.
    Regards,
    Mohinder

  • Embedding XSL in XML document

    Hi
    I am new to this particular forum. I had some query regarding embedding XSL .
    Can we embedd the XSL stylesheet in the XML document itself.
    I searched this forum and got some similar queries but the output isn't working. Can anyone put a working example.
    I have got the following XSL stylesheet:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <body>
    <table border="1" width="100%" cellpadding="1">
    <tr bgcolor="#FFFF99">
    <th style="font-family:arial unicode ms;font-size:100%" align="center">Serial number </th>
    <th style="font-family:arial unicode ms;font-size:100%" align="center">Site number </th>
    </tr>
    <xsl:for-each select="Master/RECORD">
    <xsl:if test="SR_NO &gt; 0">
    <tr>
    <td style="font-family:arial unicode ms;font-size:80%" align="right"><xsl:value-of select="SR_NO"/></td>
    <td style="font-family:arial unicode ms;font-size:80%" align="right"><xsl:value-of select="ACR_SNO"/></td>
    </tr>
    </xsl:if>
    </xsl:for-each>
    </table>
    </body>
    </xsl:template>
    </xsl:stylesheet>
    The XML document is as below:
    <?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet type="text/xsl" href="archivingmaster.xsl"?>
    <Master>
    <RECORD>
    <SR_NO>1</SR_NO>
    <ACRSNO>1</ACR_SNO>
    </RECORD>
    <RECORD>
    <SR_NO>2</SR_NO>
    <ACRSNO>2</ACR_SNO>
    </RECORD>
    </Master>
    Thanks in advance
    Ameya.

    I have already gone through that link and searched for this on the net. But it doesn't seem to work on my Mozilla Firefox browser.
    Can anybody put a working example if possible.
    Thanks
    Ameya.

  • Embedding data from xml file into metadata of a pdf

    Hi All
    I'm wanting to do the following, but struggling to figure the right way to go about it.
    I want to embedded data from my MIS into a pdf's metadata (as scrnshot). I can create a standalone xml file with all the data I require, but I'm unsure how to automate that being embedded into a pdf's advanced metadata. I know this can be done, as it worked at a previous employer, but I didn't get chance to find out how they did it.
    I'm wanting to do this so I can carry out a more advanced search of the metadata in Bridge.
    Any advice would be appreciated!

    Hi Northern,
        I have modified the modifyingXMP sample for you. After this change, put your xmp file as sample.xml and also put pdf file in the same folder where ModifyXMP executable is. After merging my changes, ModifyXMP file will read the sample.xml and will embed it into pdf file.
       Please follow the following steps
    1. Download XMPToolkit SDK and follow the steps to compile Sample
    2. Open ModifyingXMP file, replace all the content of that file with the below content
    3. Compile the ModifyingXMP file.
    4. The ModifyXMP.exe will be generated in folder (samples\target\windows\Debug), if you have changed the output folder it will be generated there.
    5. In parallel to ModifyingXMP.exe put the sample.xml (the xml file you have) and also the pdf file (say pdf file name is mypdf.pdf)
    6. Go to console and change directory to the directory where ModifyingXMP is and pass the following command
    ModifyingXMP mypdf.pdf
    7. Open the pdf file and check that value/properties
    For your reference, I am putting the content of the sample.xml file too, put this content in sample.xmp and any pdf and you will find subject field is getting added.
    ************** content of the sample.xml file. Create a file name sample.xml and put that content. Put sample.xml in parallel to ModifyingXMP.exe*******
    <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
        <rdf:Description rdf:about='' xmlns:dc='http://purl.org/dc/elements/1.1/'>
            <dc:subject>
                <rdf:Bag>
                    <rdf:li>XMP</rdf:li>
                    <rdf:li>SDK</rdf:li>
                    <rdf:li>Sample</rdf:li>
                </rdf:Bag>
            </dc:subject>
            <dc:format>image/tiff</dc:format>
        </rdf:Description>
    </rdf:RDF>
    ******************* MODIFIED CONTENT OF MODIFYING.CPP FILE. ***************************************************************************************** ************
    // ========================================================================================= ========
    // Copyright 2008 Adobe Systems Incorporated
    // All Rights Reserved.
    // NOTICE:  Adobe permits you to use, modify, and distribute this file in accordance with the terms
    // of the Adobe license agreement accompanying it.
    // ========================================================================================= ========
    * Tutorial solution for Walkthrough 2 in the XMP Programmers Guide, Modifying XMP
    * Demonstrates how to open a file for update, and modifying the contained XMP before writing it back to the file.
    #include <cstdio>
    #include <vector>
    #include <string>
    #include <cstring>
    // Must be defined to instantiate template classes
    #define TXMP_STRING_TYPE std::string
    // Must be defined to give access to XMPFiles
    #define XMP_INCLUDE_XMPFILES 1
    // Ensure XMP templates are instantiated
    #include "public/include/XMP.incl_cpp"
    // Provide access to the API
    #include "public/include/XMP.hpp"
    #include <iostream>
    #include <fstream>
    using namespace std;
    * Creates an XMP object from an RDF string.  The string is used to
    * to simulate creating and XMP object from multiple input buffers.
    * The last call to ParseFromBuffer has no kXMP_ParseMoreBuffers options,
    * thereby indicating this is the last input buffer.
    #include <sstream>     
    SXMPMeta createXMPFromRDF()
        string rdf;
        //open the RDF file and put it's content into rdf buffer
        ifstream inFile;
        inFile.open("sample.xml");//open the input file
        if (!inFile.is_open()) {
            cout <<"Couldn't open xml file" <<endl;
            exit(1);
        stringstream strStream;
        strStream << inFile.rdbuf();//read the file
        rdf = strStream.str();//str holds the content of the file
        SXMPMeta meta;
        // Loop over the rdf string and create the XMP object
        // 10 characters at a time
        int i;
        for (i = 0; i < (long)rdf.size() - 10; i += 10 )
            meta.ParseFromBuffer ( &rdf[i], 10, kXMP_ParseMoreBuffers );
        meta.ParseFromBuffer ( &rdf[i], (XMP_StringLen) rdf.size() - i );
        return meta;
    int main ( int argc, const char * argv[] )
        if ( argc != 2 ) // 2 := command and 1 parameter
            cout << "usage: ModifyingXMP (filename)" << endl;
            return 0;
        string filename = string( argv[1] );
        if(!SXMPMeta::Initialize())
            cout << "Could not initialize toolkit!";
            return -1;
        XMP_OptionBits options = 0;
        #if UNIX_ENV
            options |= kXMPFiles_ServerMode;
        #endif
        // Must initialize SXMPFiles before we use it
        if(SXMPFiles::Initialize(options))
            try
                // Options to open the file with - open for editing and use a smart handler
                XMP_OptionBits opts = kXMPFiles_OpenForUpdate | kXMPFiles_OpenUseSmartHandler;
                bool ok;
                SXMPFiles myFile;
                std::string status = "";
                // First we try and open the file
                ok = myFile.OpenFile(filename, kXMP_UnknownFile, opts);
                if( ! ok )
                    status += "No smart handler available for " + filename + "\n";
                    status += "Trying packet scanning.\n";
                    // Now try using packet scanning
                    opts = kXMPFiles_OpenForUpdate | kXMPFiles_OpenUsePacketScanning;
                    ok = myFile.OpenFile(filename, kXMP_UnknownFile, opts);
                // If the file is open then read get the XMP data
                if(ok)
                    cout << status << endl;
                    cout << filename << " is opened successfully" << endl;
                    // Create the XMP object and get the XMP data
                    SXMPMeta meta;
                    myFile.GetXMP(&meta);
                    // Create a new XMP object from an RDF string
                    SXMPMeta rdfMeta = createXMPFromRDF();
                    // Append the newly created properties onto the original XMP object
                    // This will:
                    // a) Add ANY new TOP LEVEL properties in the source (rdfMeta) to the destination (meta)
                    // b) Replace any top level properties in the source with the matching properties from the destination
                    SXMPUtils::ApplyTemplate(&meta, rdfMeta, kXMPTemplate_AddNewProperties | kXMPTemplate_ReplaceExistingProperties | kXMPTemplate_IncludeInternalProperties);
                    // Check we can put the XMP packet back into the file
                    if(myFile.CanPutXMP(meta))
                        // If so then update the file with the modified XMP
                        myFile.PutXMP(meta);
                    // Close the SXMPFile.  This *must* be called.  The XMP is not
                    // actually written and the disk file is not closed until this call is made.
                    myFile.CloseFile();
                else
                    cout << "Unable to open " << filename << endl;
            catch(XMP_Error & e)
                cout << "ERROR: " << e.GetErrMsg() << endl;
            // Terminate the toolkit
            SXMPFiles::Terminate();
            SXMPMeta::Terminate();
        else
            cout << "Could not initialize SXMPFiles.";
            return -1;
        return 0;
    Please let me know if you find any issue/assistance.
    -Sunil

  • Embedding HTML in XML CDATA and encoding issues

    Hi all,
    I'm embedding HTML code in a CDATA section. My problem is that, depending on the document, the HTML can be encoded in many formats. I borrowed a piece of code that sniffs that format so i can create String in the "right" encoding (or at least the one that was guessed).
    - If I directly injected those in the CDATA section, i guess they'd be encoded in UTF-8 and some character would be misinterpreted?
    - What if i would transcode the HTML from the sniffed format to utf-8?
    -Are there any issues woth doing this?
    Sorry if this is a dumb question but I'm quite new to that kind of encoding issues.
    BTW i'm using DOM.
    Thanks
    lexo

    I don't know if it's a dumb question. I just don't understand it at all. Encoding issues only arise when you write data from a Java program to an external location, or when you read data from an external location into a Java program. And none of the activities you mentioned there have anything to do with that.
    When you write your XML to an external file, or wherever you write it to, it gets encoded at that moment. The whole thing. Elements, attributes, CDATA sections, the whole thing. Doesn't matter what's in it, the whole thing gets encoded in whatever charset was chosen.
    Does that help?

  • XML validation errors in embedded OC4J jazn.xml

    hi
    If I open the jazn.xml of the embedded OC4J in JDeveloper 10.1.3.3.0 and select "Validate XML" from the context-menu on that file, I get these messages in the "XML Validation Errors - Log" :
    D:\oracle\jdevstudio10133\jdev\system\oracle.j2ee.10.1.3.41.57\embedded-oc4j\config\jazn.xml
        Error(10,28): <Line 10, Column 28>: XML-24535: (Error) Attribute 'schema-major-version' not expected.
        Error(10,28): <Line 10, Column 28>: XML-24535: (Error) Attribute 'schema-minor-version' not expected.
        Error(10,28): <Line 10, Column 28>: XML-24536: (Error) Missing Attribute 'filepath'
        Error(10,28): <Line 10, Column 28>: XML-24536: (Error) Missing Attribute 'OC4J_INSTANCE_ID'Strange, because I'm not aware of any changes I've made to this file.
    Could someone (from Oracle) please confirm that this is "intended", so I can exclude it as possible cause for the "security configuration issue" that I'm having.
    many thanks
    Jan Vervecken

    Thanks for your reply Frank.
    If "the content seems to be correct" then the XML schema jazn-10_0.xsd might not be what it should be.
    For the attributes "filepath" and "OC4J_INSTANCE_ID" it says they are "required", just like the validation by JDeveloper says, but they are not in the documentation.
    For the attributes "schema-major-version" and "schema-minor-version" the documentation says:
    "This attribute is not defined directly in the XSD for jazn.xml. It is according to the attributeGroup specification in the top-level OC4J XSD."
    Although there is no exact reference in that documentation, and also not in jazn-10_0.xsd, that XSD could be oc4j-10_0.xsd because it defines this:
        <xsd:attributeGroup name="oc4j-schemaVersionAttributeType">
            <xsd:annotation>
                <xsd:documentation>This type defines two different attributes which are intended to be used in the
                    root element of a schema document to define version 10.0 of the schema document.
                </xsd:documentation>
            </xsd:annotation>
            <xsd:attribute name="schema-major-version" type="xsd:integer" fixed="10"/>
            <xsd:attribute name="schema-minor-version" type="xsd:integer" default="0"/>
        </xsd:attributeGroup>I'm not sure if it is the validation by JDeveloper that went wrong here, or the XML schema jazn-10_0.xsd that is incomplete about these "schema version" attributes.
    Anyway, it seems OK to exclude it as possible cause for the "security configuration issue" that I'm having.
    regards
    Jan

  • BLOB to XML Type conversion

    Hello All,
    I have a blob column on a table that has been used to store xml files. I would like to pull out all these files and load them into a table with an xmltype column.
    I have been trying to use dbms_lob to write a function that converts blob to clob wich I can then load into the new table.
    I seem to be able to convert the clob ok, but when it goes to parse the xml to load into the table I get "LPX-00210: EXPECTED '<' INSTEAD OF '4' .....
    I think this has to do with the characterset not being utf-8. I have tried using raw as well and get the same error.
    Has anyone been able to do this that has a function they can share.
    Thanks in advance,
    Curt

    10g provides a new constructor that will work if you know the character set of the BLOB data
    FINAL CONSTRUCTOR FUNCTION XMLTYPE RETURNS SELF AS RESULT
    Argument Name Type In/Out Default?
    XMLDATA BLOB IN
    CSID NUMBER IN
    SCHEMA VARCHAR2 IN DEFAULT
    VALIDATED NUMBER IN DEFAULT
    WELLFORMED NUMBER IN DEFAULT
    you would do xmltype(BLOB,nls_charset_id(BLOB_CHARSET))

  • Blob to xml is there any other fast way without decpricated functions.

    Hi,
    1)please tel me is there any good way of getting xml from blob column or this is good? (function should not be deprecated or future it should not be discuntinue and it should be efficeant way of getting value)
    2) also tel me which csid is good defalult DBMS_LOB.DEFAULT_CSID or any other
    and storeage will be blob that i can not change.
    create or replace
    FUNCTION BLOB2CLOB(L_BLOB BLOB) RETURN CLOB IS
    L_CLOB CLOB;
    L_SRC_OFFSET NUMBER;
    L_DEST_OFFSET NUMBER;
    L_BLOB_CSID NUMBER := DBMS_LOB.DEFAULT_CSID;
    V_LANG_CONTEXT NUMBER := DBMS_LOB.DEFAULT_LANG_CTX;
    L_WARNING NUMBER;
    L_AMOUNT NUMBER;
    BEGIN
    DBMS_LOB.CREATETEMPORARY(L_CLOB, TRUE);
    L_SRC_OFFSET := 1;
    L_DEST_OFFSET := 1;
    L_AMOUNT := DBMS_LOB.GETLENGTH(L_BLOB);
    DBMS_LOB.CONVERTTOCLOB(L_CLOB,
    L_BLOB,
    L_AMOUNT,
    L_SRC_OFFSET,
    L_DEST_OFFSET,
    1,
    V_LANG_CONTEXT,
    L_WARNING);
    RETURN L_CLOB;
    END;
    '<numbers>
    <number id= "1">one</number>
    <number id= "2">two</number>
    <number id="10">ten</number>
    <number id= "6">six</number>
    </numbers>'
    above xml is in abc table col blobcol (type is blob)
    select XMLCAST(XMLQuery ('for $num in /numbers/number
    where number($num/@id) > 5
    order by number($num/@id)
    return $num/@id
    passing by value XMLPARSE(CONTENT blob2clob(BLOBCOL) returning content)
    AS VARCHAR2(100))
    from abc;
    yours sincerly.
    Edited by: 944768 on Dec 29, 2012 1:21 AM

    Well, I was talking about XMLtype (type ) and its constructors. And that has nothing to do XPath or Xquery or deprication.
    I would suggest that you always use the most appropriate datatype for storing your data, i.e. use XMLtype for XML, clob for large text and blob for binary data.
    And for the use of (depricated) Xquery or Xpath functions and operators exists another forum, XML DB

  • Blobs in XML documents.

    I'm using an xml file to update the database. Everything runs smoothly until I hit a BLOB field. I'm using the xmldom.getnodevalue to get the value associated with the node and if the node contains a BLOB value the xmldom.getnodevalue gives a truncation error.
    The xml looks like this:
    <process_code>
    <code>0003</code>
    <table_name>Test1</table_name>
    <column_values>
    <id>1234</id>
    <blob1>Insert blob here ............... end of blob</blob1>
    </column_values>
    </process_code>
    Is there a way to get the value of the node that contains a BLOB?
    Thanks
    /kp

    Would you provide sample test data and code for this?
    Thanks.

  • XML and BLOB (inside XML message)

    Hi,
    Is there any support for XML messages enclosing BLOBs, or I
    should do it on an application level by encoding my binary
    objects in a suitable text format such as UUENCODE with a MIME
    wrapper?
    Vladislav Rysin
    null

    XML requires all characters to be interpreted, therefore there
    is no provision for including raw binary data in an XML
    document. That being said, you could UUENCODE the data and
    include it in a CDATA section. The limitation on the encoding
    technique is to be sure it only produces legal characters for a
    CDATA section.
    Oracle XML Team
    http://technet.oracle.com
    Oracle Technology Network
    Vladislav Rysin (guest) wrote:
    : Hi,
    : Is there any support for XML messages enclosing BLOBs, or I
    : should do it on an application level by encoding my binary
    : objects in a suitable text format such as UUENCODE with a MIME
    : wrapper?
    : Vladislav Rysin
    null

  • Problem with embedded data-sources.xml and custom UserManager

    Hi all,
    Our application uses a custom UserManager, which is basically extended from the JDBC UserManager, declared as follows in orion-application.xml:
         <user-manager class="com.infocorpnow.a2g.security.oracle.A2GUserManager">
              <property name="table" value="pos.users" />
              <property name="userNameField" value="username" />
              <property name="passwordFiled" value="password" />
              <property name="dataSource" value="jdbc/A2GDS" />
              <property name="groupMemberShipTableName" value="pos.user_roles" />
              <property name="groupMemberShipGroupFieldName" value="role_name" />
              <property name="groupMemberShipUserNameFieldName" value="login_id" />
         </user-manager>
    Since we want to be able to deploy the application several times on the application server, and therefore have each deployment of the ear point to its own datasource (i.e. its own local "A2GDS"), we've found out how to embed data-sources.xml inside the EAR file we're deploying, and modify the orion-application.xml as follows:
         <data-sources path="./data-sources.xml" />
    And then place data-sources.xml in the same meta-inf folder as the orion-application.xml.
    This has worked fine when deploying to the standalone OC4J.
    Now when I try to deploy the exact same EAR file in Oracle 9iAS, and I get to the User Manager screen, the Custom User Manager does not show up correctly. It did show up prior to me embedding the data-sources.xml. Please help? This is fairly urgent.
    Thanks
    Jason

    I should also mention I'm using the Java Edition of 9iAS R2 (9.0.3 container) on Solaris.

  • Problems embedding HTML into XML with CVIXMLSetElementValue - unwanted &lt and &gt

    I'm using the CVI XML functions. When I try to insert some pre-exsting HTML as the element value with CVIXMLSetElementValue, it dutifuly converts all the HTMLangle brackets into &lt and &gt, which is NOT what I want.
    (I can protect the XML integrity by wrapping it in [CDATA[ ....]] but that does not solve the conversion issue here.)
    Any suggestions?
    Thanks,
    Ian
    Solved!
    Go to Solution.

    To explain a bit further, below is a code snippet and the unwanted result that I see. Does this behavior - even with CDATA - make good design sense?
    From my perspective CVIXMLSetElementValue should respect CDATA elements. Am I right? Or just biased?
    stat = CVIXMLSetElementValue (test1_element, "Hello");
    stat = CVIXMLSetElementValue (test2_element, "<p>Hello</p>");
    stat = CVIXMLSetElementValue (test3_element, "<! [CDATA[<p>Hello</p>]] >");
    // Problematic Output:
    // <?xml version="1.0"?>
    // <root>
    // <test1>Hello</test1>
    // <test2>&lt;p&gt;Hello&lt;/p&gt;</test1>
    // <test3>&lt;! [CDATA[&lt;p&gt;Hello&lt;/p&gt;]] &gt;</test1>
    // </root>

Maybe you are looking for

  • Can't find photos in a deep subdirectory

    I am unable to get Lightroom 5.3 to find photos for Importing that are in a subdirectory.  The subdirectory with the photos has five parental levels of subdirectories above it, that conatin no photos.  Lightroom won't see past the first two subdirect

  • Archive and File area empty, but used space full

    Hi, I have a problem with the File area. I loaded files on my 20GB space. Later I deleted them by putting them in the archive. No file were shown in the archive. I tried several times. The Creative Cloud Mac application tells me now that my space is

  • NEED ADVISE

    I want to purchase APPLE TV. Is connecting it to the 30" display station a good idea or are there better displays available? I have to buy either a HD display or TV but I am not sure which is best. I also have a Fujitsu Siemens Lifebook Windows XP Pr

  • Insert data from table1 with PK to remove duplicates from table2 without PK

    There will probably be a simple solution to my issue although it is currently evading me. I have a table that contains 14 million rows. There are many duplicates within this table that I need to remove. I was hoping an old trick I used in MS Access w

  • Linking Java panels

    Hi i cannot figure out how to link JPanels. How can i link JPanel to another JPanel when i click a JButton, i should go to another JPanel. I dont get how to set the "PATH". Thankx Sman