Re: Question about XML and Oracle.
From: John Peterson <j0hnp_at_comcast.net>
Date: Wed, 1 Dec 2010 11:03:56 -0700
Message-ID: <GZCdnayPoMj_E2vRnZ2dnUVZ5jadnZ2d_at_giganews.com>
>> I'm not sure if this is the correct forum, but I'll give it a shot.
>>
>> I'm using the Oracle built-in XML functions to format a result set into
>> an XML representation.
>>
>> However, I can't quite figure out how to "wrap" my results with a
>> header/footer.
>>
>> For example, I want my output to be:
>>
>> <?xml version="1.0" encoding="UTF-8" ?>
>> <OuterElement>
>> <AllMyQueryResultsXML/>
>> </OuterElement>
>>
>> I've successfully created a multi-row query that generates the
>> <AllMyQueryResultsXML>. But, I can't figure out how to get the final
>> step of wrapping those results in the version and <OuterElement> aspects.
>>
>> I know I can use XMLRoot for the version aspect. But the <OuterElement>
>> eludes me. I've tried doing stuff like:
>>
>> select xmltype("<OuterElement>") from dual
>> union all
>> ....MyMultiRowQueryThatReturnsXMLTYPE...
>> union all
>> select xmltype("</OuterElement>") from dual
>>
>> But that doesn't work, because XMLTYPE expects well-formed XML. I've
>> tried variations on the theme with XMLSERIALIZE and XMLCONCAT, but I
>> can't seem to get it to work.
>>
>> Any help that anyone can provide would be *much* appreciated.
>>
>> Thanks!
>>
>>
Date: Wed, 1 Dec 2010 11:03:56 -0700
Message-ID: <GZCdnayPoMj_E2vRnZ2dnUVZ5jadnZ2d_at_giganews.com>
"Maxim Demenko" <mdemenko_at_gmail.com> wrote in message news:4CE6B7C6.4080107_at_gmail.com...
> On 18.11.2010 21:30, John Peterson wrote:
>> I'm not sure if this is the correct forum, but I'll give it a shot.
>>
>> I'm using the Oracle built-in XML functions to format a result set into
>> an XML representation.
>>
>> However, I can't quite figure out how to "wrap" my results with a
>> header/footer.
>>
>> For example, I want my output to be:
>>
>> <?xml version="1.0" encoding="UTF-8" ?>
>> <OuterElement>
>> <AllMyQueryResultsXML/>
>> </OuterElement>
>>
>> I've successfully created a multi-row query that generates the
>> <AllMyQueryResultsXML>. But, I can't figure out how to get the final
>> step of wrapping those results in the version and <OuterElement> aspects.
>>
>> I know I can use XMLRoot for the version aspect. But the <OuterElement>
>> eludes me. I've tried doing stuff like:
>>
>> select xmltype("<OuterElement>") from dual
>> union all
>> ....MyMultiRowQueryThatReturnsXMLTYPE...
>> union all
>> select xmltype("</OuterElement>") from dual
>>
>> But that doesn't work, because XMLTYPE expects well-formed XML. I've
>> tried variations on the theme with XMLSERIALIZE and XMLCONCAT, but I
>> can't seem to get it to work.
>>
>> Any help that anyone can provide would be *much* appreciated.
>>
>> Thanks!
>>
>>
> > You may try something like this: > > SQL> select xmlroot( > 2 xmlelement("OuterElement", > 3 xmltype(cursor(select loc from dept)) > 4 ) > 5 , version '1.0').extract('/') xml > 6 from dual > 7 / > > XML > ------------------------- > <?xml version="1.0"?> > <OuterElement> > <ROWSET> > <ROW> > <LOC>NEW YORK</LOC> > </ROW> > <ROW> > <LOC>DALLAS</LOC> > </ROW> > <ROW> > <LOC>CHICAGO</LOC> > </ROW> > <ROW> > <LOC>BOSTON</LOC> > </ROW> > </ROWSET> > </OuterElement> > > where xmltype(cursor(...)) should represent your data like in > "MyMultiRowQueryThatReturnsXMLTYPE" > Note, that extract('/') is added only to make pretty print of produced > xml, it isn't necessary for your purpose. > > Best regards > > Maxim
Dear Maxim,
Thanks so much for the tip! This seems to work great!
I wish there were some way to eliminate the embedded <ROWSET><ROW><XMLRESULT> tags -- but I guess it's simple enough to search/replace "after the fact".
The crux of what I was missing (I think) was that nifty "cursor" keyword. Very interesting...
Thanks again! Received on Wed Dec 01 2010 - 12:03:56 CST