XMLTable with multiple namespaces
I have a web service that returns the following XML:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetGeoLocationIDByWellTagIDResponse xmlns="http://tempuri.org/">
<GetGeoLocationIDByWellTagIDResult xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:int>9110910</a:int>
</GetGeoLocationIDByWellTagIDResult>
</GetGeoLocationIDByWellTagIDResponse>
</s:Body>
</s:Envelope>There is the possibility of more than one Int being returned, so I am trying to use xmltable to pull out this information. But I am having some difficulty pulling out the ID node, because (I am guessing) the node is named "a:int". Here is an example of how I am attempting to get this data:
select x.*
from
(select xmltype.createxml('<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetGeoLocationIDByWellTagIDResponse xmlns="http://tempuri.org/">
<GetGeoLocationIDByWellTagIDResult xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:int>9110910</a:int>
</GetGeoLocationIDByWellTagIDResult>
</GetGeoLocationIDByWellTagIDResponse>
</s:Body>
</s:Envelope>') xml from dual) t,
xmltable(
xmlnamespaces (
'http://tempuri.org/' as "e",
'http://schemas.microsoft.com/2003/10/Serialization/Arrays' as "a"),
'//e:GetGeoLocationIDByWellTagIDResponse/a:GetGeoLocationIDByWellTagIDResult'
passing t.xml
columns
loc_id int path 'a:int'
) x;This just returns null.
How do I references the "a:int" node in the columns clause to correctly get this record back?
SQL> with sample_data as (
2 select xmltype('<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
3 <s:Body>
4 <GetGeoLocationIDByWellTagIDResponse xmlns="http://tempuri.org/">
5 <GetGeoLocationIDByWellTagIDResult xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
6 <a:int>60395867</a:int>
7 <a:int>7948500</a:int>
8 <a:int>2282774</a:int>
9 <a:int>47054172</a:int>
10 <a:int>47434315</a:int>
11 <a:int>52639251</a:int>
12 </GetGeoLocationIDByWellTagIDResult>
13 </GetGeoLocationIDByWellTagIDResponse>
14 </s:Body>
15 </s:Envelope>') xml
16 from dual
17 )
18 select x.loc_id
19 from sample_data t
20 , xmltable(
21 xmlnamespaces (
22 'http://schemas.microsoft.com/2003/10/Serialization/Arrays' as "a"
23 , 'http://schemas.xmlsoap.org/soap/envelope/' as "s"
24 , default 'http://tempuri.org/'
25 )
26 , '/s:Envelope/s:Body/GetGeoLocationIDByWellTagIDResponse/GetGeoLocationIDByWellTagIDResult/a:int'
27 passing t.xml
28 columns
29 loc_id number path '.'
30 ) x
31 ;
LOC_ID
60395867
7948500
2282774
47054172
47434315
52639251
6 rows selected
Similar Messages
-
XML Structured Index with multiple namespaces
Hi,
I'm having some trouble creating an xmlindex with structured component on a clob xmltype column without registered schema, whose data uses multiple namespaces.
The code I'm using atm:
CREATE TABLE "DECLARATIONS"
"ID" NUMBER(19,0),
"XML" "SYS"."XMLTYPE"
CREATE INDEX decl_header_ix ON "DECLARATIONS"(xml) INDEXTYPE IS XDB.XMLINDEX
PARAMETERS ('PATHS (INCLUDE (/emcs:emcsDeclaration/emcs:header//*)
NAMESPACE MAPPING (xmlns:emcs="http://www.myurl.eu/myapp/schema/emcs/nl"))');
INSERT INTO "DECLARATIONS" VALUES (1,'
<?xml version = ''1.0'' encoding = ''UTF-8'' standalone = ''yes''?>
<emcs:emcsDeclaration xsi:schemaLocation="http://www.myurl.eu/myapp/schema/emcs/nl emcs_domain.xsd"
xmlns:common="http://www.myurl.eu/myapp/schema/common"
xmlns:emcs="http://www.myurl.eu/myapp/schema/emcs/nl"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<emcs:header>
<common:identifier>70</common:identifier>
<common:declarationSequenceNumber>54566</common:declarationSequenceNumber>
<common:dateCreated>2010-10-21-01:00</common:dateCreated>
<common:status>01 Draft e-AAD in preparation</common:status>
</emcs:header>
</emcs:emcsDeclaration>');A this moment it's not desirable for us to register the schemas used in oracle. According to the documentation I should be able to add a structured component to the index as follows:
BEGIN
DBMS_XMLINDEX.registerParameter('MY_XSI_GROUP_PARAMETER'
, 'ADD_GROUP GROUP MY_XSI_GROUP
XMLTABLE decl_header
XMLNAMESPACES (''http://www.myurl.eu/myapp/schema/emcs/nl'' AS emcs,
''http://www.myurl.eu/myapp/schema/common'' AS common),
COLUMNS
status VARCHAR2(30) PATH ''/emcs:emcsDeclaration/emcs:header/common:status/text()''
END;
ALTER INDEX DECL_HEADER_IX PARAMETERS('PARAM MY_XSI_GROUP_PARAMETER');However this results in an ORA-00904: invalid identifier. After some experimenting it seems that oracle tries to parse the namespace URLs as identifiers (even tho http://download.oracle.com/docs/cd/E14072_01/appdev.112/e10492/xdb_indexing.htm#BCGJAAGH & http://download.oracle.com/docs/cd/E14072_01/appdev.112/e10492/xdb_xquery.htm#BABJCHCC specify the former), so I swapped them around:
BEGIN
DBMS_XMLINDEX.dropParameter('MY_XSI_GROUP_PARAMETER');
DBMS_XMLINDEX.registerParameter('MY_XSI_GROUP_PARAMETER'
, 'ADD_GROUP GROUP MY_XSI_GROUP
XMLTABLE decl_header
XMLNAMESPACES (emcs ''http://www.myurl.eu/myapp/schema/emcs/nl'',
common ''http://www.myurl.eu/myapp/schema/common''),
COLUMNS
status varchar2(30) PATH ''/emcs:emcsDeclaration/emcs:header/common:status/text()''
END;
ALTER INDEX DECL_HEADER_IX PARAMETERS('PARAM MY_XSI_GROUP_PARAMETER');Oracle seems to get a bit further with this, resulting in a ORA-19102: XQuery string literal expected. Here I pretty much hit a dead end. Removing the xmlnamespaces declaration altogether leads to a ORA-31013: Invalid XPATH expression. Going through the examples on http://www.liberidu.com/blog/?p=1805 works fine, but as soon as I try to add namespaces to it they stop working as well.
So my question is: how do I get xmlnamespaces (with non-default namespaces) to work in a structured xmlindex component?If you want, I can help you tomorrow. Call me at my nieuwegein office or mail me at marco[dot]gralike[at]amis[dot]nl
I have some time tomorrow, so I can help you with this. My next presentation for UKOUG will be on XML indexes strategies anyway...
In the meantime and/or also have a look at:
XML Howto's (http://www.liberidu.com/blog/?page_id=441) specifically:
XML Indexing
* Unstructured XMLIndex (part 1) – The Concepts (http://www.liberidu.com/blog/?p=228)
* Unstructured XMLIndex (Part 2) – XMLIndex Path Subsetting (http://www.liberidu.com/blog/?p=242)
* Unstructured XMLIndex (Part 3) – XMLIndex Syntax Dissected (http://www.liberidu.com/blog/?p=259)
* Unstructured XMLIndex Performance and Fuzzy XPath Searches (http://www.liberidu.com/blog/?p=310)
* Structured XMLIndex (Part 1) – Rules of Numb (http://www.liberidu.com/blog/?p=1791)
* Structured XMLIndex (Part 2) – Howto build a structured XMLIndex (http://www.liberidu.com/blog/?p=1798)
* Structured XMLIndex (Part 3) – Building Multiple XMLIndex Structures (http://www.liberidu.com/blog/?p=1805)
The posts were based on Index for XML with Repeated Elements maybe that is a bit better to read than on my notepad on the internet (aka blog)
Edited by: Marco Gralike on Oct 28, 2010 7:51 PM -
XPath expression with multiple namespaces?
Hello all.
I have been scouring the forums and Google and can't seem to find anything similar to my problem.
I have the following XML with three namespaces. Two are defined in the root element and the third is defined in the the IdSession element. To make things even more confusing, the second and third namespaces have the same prefix, 'f'.
This is the xml:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<NamespaceTestCall xmlns="http://my.default/namespace"
xmlns:f="http://my.second/namespace">
...<f:Level1>
......<f:IdSession xmlns:f="http://my.third/namespace">12345</f:IdSession>
......<Language>ENG</Language>
...</f:Nivel1>
</NamespaceTestCall>
My question is, how do I get at the IdSession element? Don't I need to create an XPath object and assign it more than one NamespaceContext?
This is what I am doing:
Document xmlDocument = loadXML(xmlSource);
XPath xpathEvaluator = XPathFactory.newInstance().newXPath();
xpathEvaluator.setNamespaceContext(new NamespaceContextProvider("a", "http://my.third/namespace"));
... xpathEvaluator.evaluate("//a:IdSession", ...);
This code works but it might not return the 'IdSession' I want, since by searching like this '//a:IdSession' it is looking in the whole document. If there were another 'IdSession' somewhere else in the document with the same URI, it would be returned. I want the 'IdSession' that lives inside of 'Level1'.
So what I would like to do is something like this:
... xpathEvaluator.evaluate("/*/Level1/a:IdSession", ...);
But this does NOT work because 'Level1' has its own namespace. So what it seems like I need to do is the following:
... xpathEvaluator.evaluate("/*/b:Level1/a:IdSession", ...);
Having already added the 'Level1' namespace to the XPath object, with the prefix 'b'. But unlike JDOM, there is no 'add' functionality, only 'set', meaning if you call set twice the second call overwrites the first.
Is there anyway to do this?
Many thanks!
BobHello,
Sorry, that was my bad. I should have explained that NamespaceContextProvider is nothing more than my implementation of the NamespaceContext interface. The way I did it, I simply implemented getNamespaceURI() and getPrefix(). And the constructor accepted two parameters -- prefix and URI. So my problem was that when I assigned this NamespaceContext to my XPath object it would only have one prefix and one URI.
But I found an implementation here:
http://www.oreillynet.com/cs/user/view/cs_msg/50304
that instead of only having one prefix and URI uses a map. Thus its method setNamespace() adds the prefix and URi to the map, and getPrefix() and getPrefixes() retrieve them from the map.
Now when I want to use more than one namespace I simply call setNamespace() as many times as necessary, adding a prefix and URI pair each time, and when I am done I assign it to my XPath object.
And it works!
Thanks for the response!
Bob -
XSD validation with multiple namespaces
Hi All,
I'm trying to validate some XML using an XSD that contains multiple namespace schema descriptions, as such, the main XSD file must import an XSD for each namespace.
The difficulty is that I cannot seem to find a way (in Oracle) to run a XSD validation using this (multi-XSD file) method.
Has anyone out there tackled a similar problem?
Cheers,
Bencheck out the class
CL_XML_SCHEMA
Regards
Raja -
Using xpath.evaluate(): xpath exp with multiple namespaces
Hi,
I have to evaluate a xpath expression with parent node and child node having different namespaces. Like : env:parent/mig:child.
I have set the namespacecontext for the child node[i.e., for the prefix 'mig'.]
But am getting this error :
javax.xml.transform.TransformerException: Prefix must resolve to a namespace: env
How can I set the namespace context for both the parent and child nodes? Or is there are any other way of doing it?
I cant use //mig:child as the requirement needs the whole xpath expression [env:parent/mig:child] to be given as input for the xpath.evaluate() method.
Here's the code :
File file = new File("D:\\Backup\\XMLs\\test.xml");
Document xmlDocument = builder.parse(file);
XPath xpathEvaluator = XPathFactory.newInstance().newXPath();
xpathEvaluator.setNamespaceContext(new NamespaceContextProvider("env", "http://xmlns.oracle.com/apps/account/1.0"));
NodeList nodeList =
(NodeList)xpathEvaluator.evaluate("/env:parent/mig:child", xmlDocument,
XPathConstants.NODESET);
xpathEvaluator.setNamespaceContext(new NamespaceContextProvider("mig", "http://xmlns.oracle.com/apps/account/1.0"));
Thanks in advance.If you want, I can help you tomorrow. Call me at my nieuwegein office or mail me at marco[dot]gralike[at]amis[dot]nl
I have some time tomorrow, so I can help you with this. My next presentation for UKOUG will be on XML indexes strategies anyway...
In the meantime and/or also have a look at:
XML Howto's (http://www.liberidu.com/blog/?page_id=441) specifically:
XML Indexing
* Unstructured XMLIndex (part 1) – The Concepts (http://www.liberidu.com/blog/?p=228)
* Unstructured XMLIndex (Part 2) – XMLIndex Path Subsetting (http://www.liberidu.com/blog/?p=242)
* Unstructured XMLIndex (Part 3) – XMLIndex Syntax Dissected (http://www.liberidu.com/blog/?p=259)
* Unstructured XMLIndex Performance and Fuzzy XPath Searches (http://www.liberidu.com/blog/?p=310)
* Structured XMLIndex (Part 1) – Rules of Numb (http://www.liberidu.com/blog/?p=1791)
* Structured XMLIndex (Part 2) – Howto build a structured XMLIndex (http://www.liberidu.com/blog/?p=1798)
* Structured XMLIndex (Part 3) – Building Multiple XMLIndex Structures (http://www.liberidu.com/blog/?p=1805)
The posts were based on Index for XML with Repeated Elements maybe that is a bit better to read than on my notepad on the internet (aka blog)
Edited by: Marco Gralike on Oct 28, 2010 7:51 PM -
Complex xml with multiple namespaces giving LPX-00601: Invalid token error
Hi
Apologies if this is a really simple question.
I have not worked with xml before and I'm drowning in different ways to do the extract.
I have a very complex xml, sample below, which I'm trying to do one siple extract to get myself going.
I have the data in a table in an xmltype column,
I am trying to extract containernumber first and get the error.
select xml_column, extract(xml_column,'/env:Envelope/env:Body/ns0:QueryCntrNumberResponse/ns0:QueryResContainerDetail/ns1:ContainerNumber/ns2:ContainerNumber')
from test_xml;
Not sure if I should use the namespaces and have tried without but results are always NULL
I would really appreciate any pointers around these ultiple namespaces.
Thanks
Nicki
XML Sample
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns0="http://com.cargosmart.cargotracking.webservice.cntr.dto"
xmlns:ns1="http://com.cargosmart.cargotracking.webservice.common.dto"
xmlns:ns2="http://com.cargosmart.cargotracking.webservice.basic.dto"
xmlns:ns3="http://com.cargosmart.cargotracking.webservice.bl.dto"
xmlns:ns4="http://com.cargosmart.cargotracking.webservice.bkg.dto">
<env:Body>
<ns0:QueryByCntrNumberResponse>
<ns0:QueryRes ult="">
<ns0:QueryCriteria>
<ns1:CarrierSCACCode>APLU</ns1:CarrierSCACCode>
<ns1:ContainerNumber>APZU344693-1</ns1:ContainerNumber>
</ns0:QueryCriteria>
<ns0:ContainerDetail>
<ns1:ContainerNumber>
<ns2:ContainerNumber>APZU344693</ns2:ContainerNumber>
<ns2:ContainerCheckDigit>1</ns2:ContainerCheckDigit>
<ns2:GrossWeight>
<ns2:Weight>20260.8</ns2:Weight>
<ns2:WeightUnit>KGS</ns2:WeightUnit>
</ns2:GrossWeight>
</ns1:ContainerNumber>
NOT THE FULL COLUMNCould I just ask you one more question.
I had already expanded the query to include the repeating sections using xmlsequence.
Has that been replaced too?
select extractvalue(xml_column,'/env:Envelope/env:Body/ns0:QueryByCntrNumberResponse/ns0:QueryResult/ns0:ContainerDetail/ns1:ContainerNumber/ns2:ContainerNumber',
'xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns0="http://com.cargosmart.cargotracking.webservice.cntr.dto"
xmlns:ns1="http://com.cargosmart.cargotracking.webservice.common.dto"
xmlns:ns2="http://com.cargosmart.cargotracking.webservice.basic.dto"
xmlns:ns3="http://com.cargosmart.cargotracking.webservice.bl.dto"
xmlns:ns4="http://com.cargosmart.cargotracking.webservice.bkg.dto"') col1,
extractvalue(value(t2),'/ns1:Event/ns1:EventDescription', 'xmlns:ns1="http://com.cargosmart.cargotracking.webservice.common.dto"') Event_Description,
extractvalue(value(t2),'/ns1:Event/ns1:EventDT/ns2:LocDT', 'xmlns:ns1="http://com.cargosmart.cargotracking.webservice.common.dto" xmlns:ns2="http://com.cargosmart.cargotracking.webservice.basic.dto"') Event_DT,
extractvalue(value(t2),'/ns1:Event/ns1:Location/ns2:LocationName', 'xmlns:ns1="http://com.cargosmart.cargotracking.webservice.common.dto" xmlns:ns2="http://com.cargosmart.cargotracking.webservice.basic.dto"') location
from test_xml t1,
table(xmlsequence(extract(t1.xml_column,'/env:Envelope/env:Body/ns0:QueryByCntrNumberResponse/ns0:QueryResult/ns0:ContainerDetail/ns1:Event','xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns0="http://com.cargosmart.cargotracking.webservice.cntr.dto"
xmlns:ns1="http://com.cargosmart.cargotracking.webservice.common.dto"
xmlns:ns2="http://com.cargosmart.cargotracking.webservice.basic.dto"
xmlns:ns3="http://com.cargosmart.cargotracking.webservice.bl.dto"
xmlns:ns4="http://com.cargosmart.cargotracking.webservice.bkg.dto"'))) t2; -
Response with multiple namespaces...
Hi there!
We have several webservices working as "document", they receive a XML document and send a XML document as response.
The problem is that the returned document has a namespace prefix for each XML tag. All of then with the same name space:
[n1:enviar_ofersecResponse xmlns:n1="a name space"]
[n2:IdentificacionMensaje xmlns:n2="a name space" v="respuesta_ofersecen01_20040921.1"/]
[n3:FechaHoraMensaje xmlns:n3="a name space" v="2004-09-21T12:07:30+02:00"/]
[n4:IdentificacionRemitente xmlns:n4="a name space" v="HC_G"/]
[n5:FuncionRemitente xmlns:n5="a name space" v="A08"/]
... and so on...
How avoid this different prefix with the same name space for each tag?. Our xml documents are big... about 5 M... so it's a waste of space and time process all those prefix and namespaces...
Thanks in advance!.Hello,
We are experiencing this as well as we are upgrading from WLS 7.0 to 8.1. WLS 7.0 worked as expected. We made no changes to the webservices.xml between 7.0 and 8.1. This response element snippet is an example of 7.0 compared to 8.1:
***BEFORE - wls 7***
<ns1:memberFound>Y</ns1:memberFound>
***AFTER - wls 8.1***
<ns1:memberFound xmlns:ns1="http://www.definityhealth.com/webservice/member/memberlookup">Y</ns1:memberFound>
I'm pursuing this with support and will report back findings here.
thanks,
chad. -
Issue with extracting node values of an XMLElement with multiple namespaces
I have created a Table with XMLType Column
CREATE TABLE xmlNode
( ID numeric(10) primary key,
DATA XMLType);
Then inserted one row
INSERT INTO xmlNode(ID, DATA) VALUES(1, '<lineItemElement orderLineItemID="12323" transactionType="New" xmlns="http://rcss.bell.ca/schema/lineitemmessages">
<rcss:catalogeID xmlns:rcss="http://rcss.bell.ca/schema/PartnerBatch">3234</rcss:catalogeID>
<rcss:venueID xmlns:rcss="http://rcss.bell.ca/schema/PartnerBatch">345345</rcss:venueID>
<rcss:startDate xmlns:rcss="http://rcss.bell.ca/schema/PartnerBatch">2007-09-10T00:00:00Z</rcss:startDate>
<rcss:endDate xmlns:rcss="http://rcss.bell.ca/schema/PartnerBatch">2007-09-10T00:00:00Z</rcss:endDate>
<rcss:contact contactID="234234" xmlns:rcss="http://rcss.bell.ca/schema/PartnerBatch">
<rcss:address>
<rcss:streetAddress1>?asdsd</rcss:streetAddress1>
<rcss:streetAddress2>?sdss</rcss:streetAddress2>
<rcss:city>?ddf</rcss:city>
<rcss:province>?sdcfsdcf</rcss:province>
<rcss:country>sds</rcss:country>
<rcss:postalCode>1121332</rcss:postalCode>
</rcss:address>
</rcss:contact>
</lineItemElement>')
Then i ran:
SELECT
extractValue(data,'/lineItemElement/rcss:catalogeID','xmlns=http://rcss.bell.ca/schema/lineitemmessages, xmlns:rcss=http://rcss.bell.ca/schema/PartnerBatch')
from xml where id=1
There is nothing returned.
Please advise how could I get the node value when there is namespace?
I know how to extract values if there is one namespace but i'm not able to extract values if there are two namespaces.
Any help is appreciable!!
Thanks in Advance.I fixed that problem too. What I thought was a singleton was actually a repeating element. I needed to be able to "multiply" the repeating node for the main node, but I couldn't find a concise way of doing this in SQL. So instead I did it in with two loops.
FOR rec IN (
SELECT
extractvalue(value(e), 'surchargeEntry/company',p_namespace) company
,extractvalue(value(e), 'surchargeEntry/surchargeType',p_namespace) surcharge_type
,extractvalue(value(e), 'surchargeEntry/shortDescription',p_namespace) short_description
,extractvalue(value(e), 'surchargeEntry/longDescription',p_namespace) long_description
,e.column_value surcharge_entry_xml
FROM TABLE(xmlsequence(extract(p_xml, 'surchargeInquiryResponse' ||
'/surchargeAttributes/surchargeEntry'
,p_namespace))) e
) LOOP
FOR rec_country IN (
SELECT
extractvalue(value(c), 'country/originationCountry',p_namespace) origination_country
,extractvalue(value(c), 'country/destinationCountry',p_namespace) destination_country
FROM TABLE(xmlsequence(extract(rec.surcharge_entry_xml, 'surchargeEntry/country',p_namespace))) c
LOOP
nafta_fee_obj.append_surcharge_entry_data(
v_arr
,r_surcharge_entry(
rec.company
,rec.surcharge_type
,rec.short_description
,rec.long_description
,rec_country.origination_country
,rec_country.destination_country
END LOOP;
END LOOP;
I populate a collection, which is easy to pass around between routines. I can easily convert the collection to a ref cursor, and index-by array, comma-delimited string, etc.
Apparently, the namespace is required in SQL, but not in staright PL/SQL.
I've also noticed that the docs say xmltype() has all these member functions, but when I try to use some of them, I get an error that it's undefined. Like getNumVal(). There are some functions I can use in SQL, or PL/SQL, but not vice-versa.
- Dan Clamage -
Extract on xmltype with multiple namespaces
Given the following xml instance document can you share an example to retrieve the data of the <TransactionNumber> and <IdValue> elements using the XMLType data type. This document is generated by XBD and has 3 different namespaces.
declare
lv_xml xmltype := xmltype(
'<ConfirmAddStudentDeposit xmlns="urn:sungardsct:udc:ws:messages:1.0">
<StudentDepositIdentifier>
<AccountIdentifier xmlns="urn:sungardsct:udc:domain:ar:1.0">
<IdValue xmlns="urn:sungardsct:udc:resources:common:1.0" name="BannerUID">210009102</IdValue>
</AccountIdentifier>
<TransactionNumber xmlns="urn:sungardsct:udc:domain:ar:1.0">8</TransactionNumber>
<ReceiptNumber xmlns="urn:sungardsct:udc:domain:ar:1.0">1606</ReceiptNumber>
</StudentDepositIdentifier>
</ConfirmAddStudentDeposit>');
lv_frag xmltype;
begin
lv_frag := lv_xml.extract('/ConfirmAddStudentDeposit/StudentDepositIdentifier/TransactionNumber', 'xmlns="urn:sungardsct:udc:ws:messages:1.0" xmlns="urn:sungardsct:udc:domain:ar:1.0"');
if lv_frag is null then
dbms_output.put_line('NO good');
else
dbms_output.put_line('maybe working');
end if;
end;You'll need to use prefixs or namespaces
declare
lv_xml xmltype := xmltype(
'<ConfirmAddStudentDeposit xmlns="urn:sungardsct:udc:ws:messages:1.0">
<StudentDepositIdentifier>
<AccountIdentifier xmlns="urn:sungardsct:udc:domain:ar:1.0">
<IdValue xmlns="urn:sungardsct:udc:resources:common:1.0" name="BannerUID">210009102</IdValue>
</AccountIdentifier>
<TransactionNumber xmlns="urn:sungardsct:udc:domain:ar:1.0">8</TransactionNumber>
<ReceiptNumber xmlns="urn:sungardsct:udc:domain:ar:1.0">1606</ReceiptNumber>
</StudentDepositIdentifier>
</ConfirmAddStudentDeposit>');
lv_frag xmltype;
begin
lv_frag := lv_xml.extract('/a:ConfirmAddStudentDeposit/a:StudentDepositIdentifier/c:TransactionNumber', 'xmlns:a="urn:sungardsct:udc:ws:messages:1.0" xmlns:c="urn:sungardsct:udc:domain:ar:1.0"');
if lv_frag is null then
dbms_output.put_line('NO good');
else
dbms_output.put_line('maybe working');
end if;
end; -
I have an XML file
<?xml version="1.0"?>
-<Document xmlns="http://www.taleo.com/ws/integration/toolkit/2011/05">
+<Attributes>
-<Content>
-<ExportXML xmlns="http://www.taleo.com/ws/integration/toolkit/2005/07/action/export">
-<record>
<field name="ContestNumber">12000000RT</field>
<field name="JobInformation,JobType,Description">Experienced</field>
</record>
</ExportXML>
</Content>
</Document>
I am using the following file to retrieve the data
SELECT *
FROM XMLTable(XMLNAMESPACES('http://www.taleo.com/ws/integration/toolkit/2011/05' as "n1",
'http://www.taleo.com/ws/integration/toolkit/2005/07/action/export' as "n2"), '//n1:Document/Content/n2:ExportXML/record'
passing xmltype(
bfilename('TEST','TALEOOUT-12-26.xml')
, nls_charset_id('AL32UTF8')
columns
ContestName varchar2(1000) path 'field[1]'
)What am i doing wrongThis was the code that worked.Thanks A_Non .
SELECT *
FROM XMLTable(XMLNAMESPACES('http://www.taleo.com/ws/integration/toolkit/2011/05' as "n1",
'http://www.taleo.com/ws/integration/toolkit/2005/07/action/export' as "n2"),
'/n1:Document/n1:Content/n2:ExportXML/n2:record'
passing xmltype(
bfilename('TEST','TALEOOUT-12-26.xml')
, nls_charset_id('AL32UTF8')
columns
ContestNumber VARCHAR2 (4000) path 'n2:field[1]',
Job_Info_JobTypDesc VARCHAR2 (4000) path 'n2:field[2]',
JobFamily VARCHAR2 (4000) path 'n2:field[3]',.........
)Edited by: Rameshkumar T on Nov 30, 2012 10:59 AM -
XML doc with multiple namespaces
Hi,
a little stupid question...
Is it possible to get a xml file that assigns two different namespaces and I don't want to use a prefix?
example:
xml doc uses namespace xmlns:a="someuri" and xmlns:b="otheruri"
<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns="someuri" xmlns:b="otheruri">
<test/>
<b:rest/>
</Root>
Some way to get prefix b out of it?
Thanxokay, it was a stupid question...
solution:
<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns="someuri" xmlns:b="otheruri">
<test/>
<rest xmlns="otheruri"/>
</Root> -
C# Script to open and read an Excel spreadsheet with multiple worksheets
Can someone provide me the C# syntax and Edit Script to open an Excel spreadsheet with multiple worksheets and then using the data to create and output a .csv file? The multiple worksheets contain different data elements that I'll need to parse out and then
store as a .csv file that will then be read to pump data into our SQL Server Database.
Thanks for your review and am hopeful for a reply.
PSULionRPI think this code originally came from Joel, who comes here quite a bit. I'm not a C# expert, like Joe is, but I think this is pretty close to what you want.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Excel;
using System.IO;
namespace WindowsFormsApplication2
public partial class Form1 : Form
public Form1()
InitializeComponent();
private void button1_Click(object sender, EventArgs e)
Main();
public void Main()
string filePath = "C:\\Users\\Ryan\\Desktop\\MainExcel.xlsx";
Microsoft.Office.Interop.Excel.Application xlobj = new Microsoft.Office.Interop.Excel.Application();
Workbook w = default(Workbook);
Workbook w1 = default(Workbook);
Worksheet s = default(Worksheet);
Worksheet s1 = default(Worksheet);
Worksheet xlsht = default(Worksheet);
xlobj.Visible = true;
int intItem = 1;
DirectoryInfo dirSrc = new DirectoryInfo(@"C:\Users\Ryan\Desktop\Test_Folder\");
foreach (FileInfo ChildFile in dirSrc.GetFiles())
try
// Renaming the excel sheet
w = xlobj.Workbooks._Open(ChildFile.FullName,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
w1 = xlobj.Workbooks._Open(filePath,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
//this doesn't make any sense
//w1 = xlobj.Workbooks.Open(filePath);
//if (intItem > 3)
Excel.Worksheet lastSht =
(Excel.Worksheet)w1.Worksheets[w1.Worksheets.Count];
xlsht = (Excel.Worksheet)w1.Worksheets.Add(Type.Missing,
lastSht,
Type.Missing, Type.Missing);
s = (Excel.Worksheet)w.Worksheets[1];
s1 = (Excel.Worksheet)w1.Worksheets[intItem];
s1.Name = ChildFile.Name;
// it will copy and paste sheet from one to another with formula
s.UsedRange.Copy(Type.Missing);
Excel.Range r = s1.get_Range("A1", Type.Missing);
r.PasteSpecial(Excel.XlPasteType.xlPasteValues,
Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone,
Type.Missing, Type.Missing);
s1.UsedRange.Formula = s.UsedRange.Formula;
// Renaming the excel sheet
//w.Save();
w.Close(false, Type.Missing, Type.Missing);
w1.Close(false, Type.Missing, Type.Missing);
catch (Exception ex)
//w.Save();
w1.Save();
w.Close(false, Type.Missing, Type.Missing);
w1.Close(false, Type.Missing, Type.Missing);
intItem = intItem + 1;
//Dts.TaskResult = ScriptResults.Success
Do you need help getting everything into a CSV, or can you take it from here???
Knowledge is the only thing that I can give you, and still retain, and we are both better off for it. -
Parsing across multiple namespaces... best practice?
Howdy all, here's my situation:
I am attempting to create a simple interface to a particular type of webdav server which has some unusual XML data coming back, and need some advice on the best way to parse this XML.
I have a generic "query" object which consists of a set of "Fields", a "Scope" and a set of "Constraints". This query is ultimately formed as an XML request sent to the WebDAV server. The response is also a generic "ResultSet" response, which consists of "Rows". Each Row consists of "Fields" (the same type as in the query). A Field is basically a key/value pair (all Strings), and a namespace which describes the location of the field within the WebDAV server. (obviously modelled on a JDBC-style interaction)
I need to build a generic parser which can create a ResultSet from a raw XML document.
For Example:
Given a "query" with the following fields:
FIELD 1
namespace: urn:schemas:httpmail
name:fromemail
FIELD 2
namespace: DAV
name: id
The query will basically say (pseudo SQL)
"select "urn:schemas:httpmail:fromemail", "DAV:id" from <scope> where <constraints>"
This will return an XML document something like this:
<a:multistatus
xmlns:a="DAV:"
xmlns:b="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/"
xmlns:c="xml:"
xmlns:d="urn:schemas:httpmail:"
xmlns:e="urn:schemas:mailheader:">
<a:response>
<a:href>
http://blah.blah.com/someurl
</a:href>
<a:propstat>
<a:status>
HTTP/1.1 200 OK
</a:status>
<a:prop>
<d:fromemail>
[email protected]
</d:fromemail>
<a:id>
AQsAAAAARgAgCwAAAABGeAIAAAAA
</a:id>
</a:prop>
</a:propstat>
</a:response>
<a:response>
</a:response>
</a:multistatus>
So.. I then need to create a ResultSet object, which looks like this:
ResultSet<Object>
|---Rows<Collection>
|---Row<Object>
|---Field<Object>
|---name: fromemail
|---namespace: urn:schemas:httpmail
|---value: [email protected]
|---Field<Object>
|---name: id
|---namespace: DAV
|---value: AQsAAAAARgAgCwAAAABGeAIAAAAA
|---Row<Object>
....As you can see, I need BOTH the value, and the original data relating to the namespace and field name in the java object returned.
Problems I am having:
1. Parsing multiple namespaces. The path to multistatus/response/prop/fromemail (for example) spans two namespaces, hence can't use Commons Digester
2. Including XML element names as values in the returned object. I need/want to be able to store the XML element name (eg "fromemail") as a value in the java object returned.
I'm looking for thoughts as to the best way to deal with this... XPath?, DOM/SAX? etc
Any help you can provide.
CheersHowdy all, here's my situation:
I am attempting to create a simple interface to a particular type of webdav server which has some unusual XML data coming back, and need some advice on the best way to parse this XML.
I have a generic "query" object which consists of a set of "Fields", a "Scope" and a set of "Constraints". This query is ultimately formed as an XML request sent to the WebDAV server. The response is also a generic "ResultSet" response, which consists of "Rows". Each Row consists of "Fields" (the same type as in the query). A Field is basically a key/value pair (all Strings), and a namespace which describes the location of the field within the WebDAV server. (obviously modelled on a JDBC-style interaction)
I need to build a generic parser which can create a ResultSet from a raw XML document.
For Example:
Given a "query" with the following fields:
FIELD 1
namespace: urn:schemas:httpmail
name:fromemail
FIELD 2
namespace: DAV
name: id
The query will basically say (pseudo SQL)
"select "urn:schemas:httpmail:fromemail", "DAV:id" from <scope> where <constraints>"
This will return an XML document something like this:
<a:multistatus
xmlns:a="DAV:"
xmlns:b="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/"
xmlns:c="xml:"
xmlns:d="urn:schemas:httpmail:"
xmlns:e="urn:schemas:mailheader:">
<a:response>
<a:href>
http://blah.blah.com/someurl
</a:href>
<a:propstat>
<a:status>
HTTP/1.1 200 OK
</a:status>
<a:prop>
<d:fromemail>
[email protected]
</d:fromemail>
<a:id>
AQsAAAAARgAgCwAAAABGeAIAAAAA
</a:id>
</a:prop>
</a:propstat>
</a:response>
<a:response>
</a:response>
</a:multistatus>
So.. I then need to create a ResultSet object, which looks like this:
ResultSet<Object>
|---Rows<Collection>
|---Row<Object>
|---Field<Object>
|---name: fromemail
|---namespace: urn:schemas:httpmail
|---value: [email protected]
|---Field<Object>
|---name: id
|---namespace: DAV
|---value: AQsAAAAARgAgCwAAAABGeAIAAAAA
|---Row<Object>
....As you can see, I need BOTH the value, and the original data relating to the namespace and field name in the java object returned.
Problems I am having:
1. Parsing multiple namespaces. The path to multistatus/response/prop/fromemail (for example) spans two namespaces, hence can't use Commons Digester
2. Including XML element names as values in the returned object. I need/want to be able to store the XML element name (eg "fromemail") as a value in the java object returned.
I'm looking for thoughts as to the best way to deal with this... XPath?, DOM/SAX? etc
Any help you can provide.
Cheers -
How to add multiple namespaces in XSD ?
Can anyone tell me how to add multiple namespaces inside an XSD. Or how to import XSD into another XSD ??
Thanks<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://xml.ibridge.nl/nl/rsg/domein/3/company" xmlns:alg="http://mynamespace/generic" targetNamespace="http://xml.ibridge.nl/nl/rsg/domein/3/company" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.1">
<xs:import namespace="http://mynamespace/generic" schemaLocation="algemeen.xsd"/>
you define xmlns:alg with a namespace
and after that use the namespace itself to import a xsd for it -
Dear SCN users,
I have requirement where there are multiple XSDs that need to be clubbed.(XSDs are with different target namespaces)
I succesfully clubbed them all,But when I use the same in message mapping I am getting only one target namespace(ns0) because of which I am getting error when I test with the sample XML given
So how to handle this multiple namespaces in XSDHi,
This blog will definitely help
GS1 Integration - SAP PI 7.1 – PART - I
GS1 Integration - SAP PI 7.1 – PART - II
Part 1 consists of loading the entire schema. Part 2 is about creating the business document header, but in your case, you need to remove it, so just a little modification is required.
Regards,
Mark
Maybe you are looking for
-
Automatic lists won't turn off
I've read various threads on similar issues - while writing in Pages, or entering data in Numbers, the program will insert data for me that is incremental to what I desire. I believe this behavior is what is meant by the 'Automatically detect lists'
-
For all entries changes the order of the itab
Hi Experts In the following query i have used two internal tables namely it_first and it_zlist. The material inwhich the it_zlist is different sorting order After executing this query, the order of the material inwhich
-
Traffic lights in classical report
Hi All, Is it possible display traffic lights in classical report ? if so please help me Regs, Murthy
-
So i started getting this message about every 2 hours or so and it had said something about ksfetch and i have no idea about what it means... It Was sent from somethhing called "GoogleSoftwareUpdateAgent. If anyone can help me with this...that would
-
We are ordering a book for one of my daughter's teachers, and we need it back before May 19. What do you think is the latest date I can order by and still get it in-time?