Hi there
I have to call a web service from PL/SQL and parse the returned values
I have a return call like this:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetDefinitionResponse xmlns="http://synergi.com">
<GetDefinitionResult><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<Favourite>
<PkFavourite>61057</PkFavourite>
<ParentFavourite></ParentFavourite>
<Type>1</Type>
<Report>6</Report>
<AutoExecute>1</AutoExecute>
<SeparateCondition>0</SeparateCondition>
<ExposurePercentInc></ExposurePercentInc>
<ExposureFactor></ExposureFactor>
<ExposureApplication></ExposureApplication>
<Disabled></Disabled>
<ExpireDate></ExpireDate>
<Language>
<PkFavourite>61057</PkFavourite>
<Language>1</Language>
<Description>id report1</Description>
<Url></Url>
</Language>
<Language>
<PkFavourite>61057</PkFavourite>
<Language>2</Language>
<Description>id report1</Description>
<Url></Url>
</Language>
<Language>
<PkFavourite>61057</PkFavourite>
<Language>3</Language>
<Description>id report1</Description>
<Url></Url>
</Language>
<Language>
<PkFavourite>61057</PkFavourite>
<Language>4</Language>
<Description>id report1</Description>
<Url></Url>
</Language>
<Condition>
<PkFavourite>61057</PkFavourite>
<ConditionNo>3</ConditionNo>
<DbFunctionDomain>0</DbFunctionDomain>
<Domain>107</Domain>
<ValueListOperator>2</ValueListOperator>
<ConditionOperator>1</ConditionOperator>
<ConditionOperator2>0</ConditionOperator2>
<ExtraSqlCondition></ExtraSqlCondition>
<FlgExactLevel>0</FlgExactLevel>
<FlgForceExists>0</FlgForceExists>
<ConditionValue>
<PkFavourite>61057</PkFavourite>
<ConditionNo>3</ConditionNo>
<ConditionValueNo>1</ConditionValueNo>
<DbFunctionValue>0</DbFunctionValue>
<ValueOperator>0</ValueOperator>
<NumberValue></NumberValue>
<StringValue></StringValue>
<DateValue></DateValue>
<NumberValue2></NumberValue2>
<PeriodPredef>24</PeriodPredef>
</ConditionValue>
<ConditionDomain>
<PkFavourite>61057</PkFavourite>
<ConditionNo>3</ConditionNo>
<Domain>540</Domain>
</ConditionDomain>
</Condition>
<Condition>
<PkFavourite>61057</PkFavourite>
<ConditionNo>2</ConditionNo>
<DbFunctionDomain>0</DbFunctionDomain>
<Domain>531</Domain>
<ValueListOperator>2</ValueListOperator>
<ConditionOperator>0</ConditionOperator>
<ConditionOperator2>0</ConditionOperator2>
<ExtraSqlCondition></ExtraSqlCondition>
<FlgExactLevel>0</FlgExactLevel>
<FlgForceExists>0</FlgForceExists>
<ConditionValue>
<PkFavourite>61057</PkFavourite>
<ConditionNo>2</ConditionNo>
<ConditionValueNo>1</ConditionValueNo>
<DbFunctionValue>0</DbFunctionValue>
<ValueOperator>14</ValueOperator>
<NumberValue>3</NumberValue>
<StringValue></StringValue>
<DateValue></DateValue>
<NumberValue2></NumberValue2>
<PeriodPredef>0</PeriodPredef>
</ConditionValue>
<ConditionDomain>
<PkFavourite>61057</PkFavourite>
<ConditionNo>2</ConditionNo>
<Domain>531</Domain>
</ConditionDomain>
</Condition>
<Condition>
<PkFavourite>61057</PkFavourite>
<ConditionNo>4</ConditionNo>
<DbFunctionDomain>0</DbFunctionDomain>
<Domain>178</Domain>
<ValueListOperator>2</ValueListOperator>
<ConditionOperator>1</ConditionOperator>
<ConditionOperator2>0</ConditionOperator2>
<ExtraSqlCondition></ExtraSqlCondition>
<FlgExactLevel>0</FlgExactLevel>
<FlgForceExists>0</FlgForceExists>
<ConditionValue>
<PkFavourite>61057</PkFavourite>
<ConditionNo>4</ConditionNo>
<ConditionValueNo>1</ConditionValueNo>
<DbFunctionValue>0</DbFunctionValue>
<ValueOperator>14</ValueOperator>
<NumberValue>50021</NumberValue>
<StringValue></StringValue>
<DateValue></DateValue>
<NumberValue2></NumberValue2>
<PeriodPredef>0</PeriodPredef>
</ConditionValue>
<ConditionValue>
<PkFavourite>61057</PkFavourite>
<ConditionNo>4</ConditionNo>
<ConditionValueNo>2</ConditionValueNo>
<DbFunctionValue>0</DbFunctionValue>
<ValueOperator>14</ValueOperator>
<NumberValue>50019</NumberValue>
<StringValue></StringValue>
<DateValue></DateValue>
<NumberValue2></NumberValue2>
<PeriodPredef>0</PeriodPredef>
</ConditionValue>
<ConditionValue>
<PkFavourite>61057</PkFavourite>
<ConditionNo>4</ConditionNo>
<ConditionValueNo>3</ConditionValueNo>
<DbFunctionValue>0</DbFunctionValue>
<ValueOperator>14</ValueOperator>
<NumberValue>50018</NumberValue>
<StringValue></StringValue>
<DateValue></DateValue>
<NumberValue2></NumberValue2>
<PeriodPredef>0</PeriodPredef>
</ConditionValue>
<ConditionValue>
<PkFavourite>61057</PkFavourite>
<ConditionNo>4</ConditionNo>
<ConditionValueNo>4</ConditionValueNo>
<DbFunctionValue>0</DbFunctionValue>
<ValueOperator>14</ValueOperator>
<NumberValue>50020</NumberValue>
<StringValue></StringValue>
<DateValue></DateValue>
<NumberValue2></NumberValue2>
<PeriodPredef>0</PeriodPredef>
</ConditionValue>
<ConditionDomain>
<PkFavourite>61057</PkFavourite>
<ConditionNo>4</ConditionNo>
<Domain>540</Domain>
</ConditionDomain>
</Condition>
<Connected>
<PkFavourite>61057</PkFavourite>
<Connected>3</Connected>
<Operator>0</Operator>
</Connected>
<Option>
<PkFavourite>61057</PkFavourite>
<DomainNode>2650</DomainNode>
<Report>2</Report>
</Option>
<Option>
<PkFavourite>61057</PkFavourite>
<DomainNode>2435</DomainNode>
<Report>2</Report>
</Option>
<Option>
<PkFavourite>61057</PkFavourite>
<DomainNode>110</DomainNode>
<Report>3</Report>
</Option>
<Option>
<PkFavourite>61057</PkFavourite>
<DomainNode>116</DomainNode>
<Report>3</Report>
</Option>
<Option>
<PkFavourite>61057</PkFavourite>
<DomainNode>2006</DomainNode>
<Report>3</Report>
</Option>
<Option>
<PkFavourite>61057</PkFavourite>
<DomainNode>2005</DomainNode>
<Report>3</Report>
</Option>
<Option>
<PkFavourite>61057</PkFavourite>
<DomainNode>2015</DomainNode>
<Report>3</Report>
</Option>
<Option>
<PkFavourite>61057</PkFavourite>
<DomainNode>110</DomainNode>
<Report>4</Report>
</Option>
<Option>
<PkFavourite>61057</PkFavourite>
<DomainNode>350</DomainNode>
<Report>4</Report>
</Option>
<Option>
<PkFavourite>61057</PkFavourite>
<DomainNode>2650</DomainNode>
<Report>4</Report>
</Option>
<Option>
<PkFavourite>61057</PkFavourite>
<DomainNode>2435</DomainNode>
<Report>4</Report>
</Option>
<Option>
<PkFavourite>61057</PkFavourite>
<DomainNode>2482</DomainNode>
<Report>5</Report>
</Option>
<Option>
<PkFavourite>61057</PkFavourite>
<DomainNode>116</DomainNode>
<Report>1</Report>
</Option>
<Sort>
<PkFavourite>61057</PkFavourite>
<DomainNode>107</DomainNode>
<Sequence>0</Sequence>
<Report>2</Report>
<SortOrderType>1</SortOrderType>
</Sort>
<Sort>
<PkFavourite>61057</PkFavourite>
<DomainNode>357</DomainNode>
<Sequence>1</Sequence>
<Report>2</Report>
<SortOrderType>1</SortOrderType>
</Sort>
<Sort>
<PkFavourite>61057</PkFavourite>
<DomainNode>390</DomainNode>
<Sequence>2</Sequence>
<Report>2</Report>
<SortOrderType>1</SortOrderType>
</Sort>
<Sort>
<PkFavourite>61057</PkFavourite>
<DomainNode>107</DomainNode>
<Sequence>0</Sequence>
<Report>3</Report>
<SortOrderType>1</SortOrderType>
</Sort>
<Sort>
<PkFavourite>61057</PkFavourite>
<DomainNode>357</DomainNode>
<Sequence>1</Sequence>
<Report>3</Report>
<SortOrderType>1</SortOrderType>
</Sort>
<Sort>
<PkFavourite>61057</PkFavourite>
<DomainNode>107</DomainNode>
<Sequence>0</Sequence>
<Report>4</Report>
<SortOrderType>1</SortOrderType>
</Sort>
<Sort>
<PkFavourite>61057</PkFavourite>
<DomainNode>357</DomainNode>
<Sequence>1</Sequence>
<Report>4</Report>
<SortOrderType>1</SortOrderType>
</Sort>
<Sort>
<PkFavourite>61057</PkFavourite>
<DomainNode>390</DomainNode>
<Sequence>2</Sequence>
<Report>4</Report>
<SortOrderType>1</SortOrderType>
</Sort>
<Sort>
<PkFavourite>61057</PkFavourite>
<DomainNode>357</DomainNode>
<Sequence>0</Sequence>
<Report>5</Report>
<SortOrderType>1</SortOrderType>
</Sort>
<Sort>
<PkFavourite>61057</PkFavourite>
<DomainNode>357</DomainNode>
<Sequence>0</Sequence>
<Report>12</Report>
<SortOrderType>1</SortOrderType>
</Sort>
<Sort>
<PkFavourite>61057</PkFavourite>
<DomainNode>107</DomainNode>
<Sequence>1</Sequence>
<Report>1</Report>
<SortOrderType>1</SortOrderType>
</Sort>
<Sort>
<PkFavourite>61057</PkFavourite>
<DomainNode>357</DomainNode>
<Sequence>2</Sequence>
<Report>1</Report>
<SortOrderType>1</SortOrderType>
</Sort>
<FavouriteReport>
<PkFavourite>61057</PkFavourite>
<Report>6</Report>
<SelectionAggrType>1</SelectionAggrType>
<SelectionAggrDomain>3112</SelectionAggrDomain>
<TargetApplication></TargetApplication>
<SpecialReport></SpecialReport>
<PredefDate></PredefDate>
<RollingAveragePeriods>0</RollingAveragePeriods>
</FavouriteReport>
<ReportType>
<PkFavourite>61057</PkFavourite>
<Report>6</Report>
<ReportType>1</ReportType>
</ReportType>
<Selection>
<PkFavourite>61057</PkFavourite>
<SelectionNo>3</SelectionNo>
<SelectionDomain>106</SelectionDomain>
<Report>6</Report>
<SelectionType>1</SelectionType>
<Period>0</Period>
<Levels></Levels>
<Interval></Interval>
<SelectedCode></SelectedCode>
<FlgFillEmpty>0</FlgFillEmpty>
</Selection>
<Selection>
<PkFavourite>61057</PkFavourite>
<SelectionNo>4</SelectionNo>
<SelectionDomain>4902</SelectionDomain>
<Report>6</Report>
<SelectionType>1</SelectionType>
<Period>0</Period>
<Levels></Levels>
<Interval></Interval>
<SelectedCode></SelectedCode>
<FlgFillEmpty>0</FlgFillEmpty>
</Selection>
<Selection>
<PkFavourite>61057</PkFavourite>
<SelectionNo>1</SelectionNo>
<SelectionDomain>357</SelectionDomain>
<Report>6</Report>
<SelectionType>1</SelectionType>
<Period>0</Period>
<Levels></Levels>
<Interval></Interval>
<SelectedCode></SelectedCode>
<FlgFillEmpty>0</FlgFillEmpty>
</Selection>
<Selection>
<PkFavourite>61057</PkFavourite>
<SelectionNo>2</SelectionNo>
<SelectionDomain>107</SelectionDomain>
<Report>6</Report>
<SelectionType>3</SelectionType>
<Period>5</Period>
<Levels></Levels>
<Interval></Interval>
<SelectedCode></SelectedCode>
<FlgFillEmpty>0</FlgFillEmpty>
</Selection>
<Aggregate>
<PkFavourite>61057</PkFavourite>
<DescendFavourite>61057</DescendFavourite>
<DescendLevel>1</DescendLevel>
</Aggregate>
</Favourite>]]></GetDefinitionResult>
</GetDefinitionResponse>
</soap:Body>
</soap:Envelope>
How do I read ie. all the DomainNode in the Sort element with Xpath (preferably) or Xquery?
The database will be a 10.2.0.4 at most.
Update: so far I have got this
declare
p_xml clob := '
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetDefinitionResponse xmlns="http://synergi.com">
<GetDefinitionResult><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<Favourite>
....
....
...
';
w_namespaces varchar2(100) := 'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://synergi.com"';
w_xpath varchar2(100) := '/soap:Envelope/soap:Body/GetDefinitionResponse/GetDefinitionResult/text()';
w_xpath2 varchar2(100) := '/*:DomainNode';
w_svar clob;
w_xml xmltype;
procedure pr(p_in varchar2)
as
begin
dbms_output.put_line(p_in);
end;
begin
w_xml := xmltype(p_xml);
select extract(w_xml,w_xpath,w_namespaces).getclobval()
into w_svar
from dual;
pr('svar:' || w_svar);
/*
select extractvalue(xmltype(w_svar),w_xpath2)
into w_svar
from dual;
pr('svar2:' || w_svar); */
end;
I get an ora-01706 error when I just do the extract (field longer that allowed 4K) - so now I extract the whole content of <GetDefinitionResult> - but then the CDATA thing is pestering me :-)
Is there a smart way of getting rid of this CDATA including the <! and [[ and ]] ? I mean you can make CDATA with xmlcdata function ... but nbow I would like to get of rid of it.
end update -------------------------
regards
Mette