Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
XML File from several Cursors with 1 cursor without rela
Message
From
22/05/2019 11:16:04
Luis Santos
Biglevel-Soluções Informáticas, Lda
Portugal
 
 
To
01/05/2019 17:59:43
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Miscellaneous
Thread ID:
01668303
Message ID:
01668800
Views:
79
>>>Hello community,
>>>
>>>I have found this example to generate XML file With associated XSD, but i want create the same example using another cursor that as no Key to associate to tables customers and Orders and OrdersDetails, like on the example:
>>>
>>>Select customers
>>>Set Relation To customerid Into crsOrders In crsCustomer
>>>Set Relation To orderid Into crsOrdDet In crsOrders Additive
>>>
>>>In this case how can do that?, for example i use on example above the table Territories (Suppose this table contains my enterprise data informations), i don´t have any field to create relation between the other tables ?
>>>Also, i need my company information on the main TAG like :
>>>
>>><Enterprise>
>>>    <territoryid>02116</territoryid>
>>>    <territorydescription>Boston</territorydescription>
>>>    <regionid>1</regionid>
>>>	<MyCustomer>
>>>		<customerid>BONAP</customerid>
>>>		<companyname>Bon app'</companyname>
>>>		<contactname>Laurence Lebihan</contactname>
>>>		<contacttitle>Owner</contacttitle>
>>>		<address>12, rue des Bouchers</address>
>>>		<city>Marseille</city>
>>>		<postalcode>13008</postalcode>
>>>		<country>France</country>
>>>		<phone>91.24.45.40</phone>
>>>		<fax>91.24.45.41</fax>
>>>		<MyOrders>
>>>			<orderid>10331</orderid>
>>>			<customerid>BONAP</customerid>
>>>			<employeeid>9</employeeid>
>>>			<orderdate>1996-10-16</orderdate>
>>>			<requireddate>1996-11-27</requireddate>
>>>			<shippeddate>1996-10-21</shippeddate>
>>>			<shipvia>1</shipvia>
>>>			<freight>10.1900</freight>
>>>			<shipname>Bon app'</shipname>
>>>			<shipaddress>12, rue des Bouchers</shipaddress>
>>>			<shipcity>Marseille</shipcity>
>>>			<shippostalcode>13008</shippostalcode>
>>>			<shipcountry>France</shipcountry>
>>>			<MyOrderDetails>
>>>				<orderid>10331</orderid>
>>>				<productid>54</productid>
>>>				<unitprice>5.9000</unitprice>
>>>				<quantity>15</quantity>
>>>				<discount>0.00000</discount>
>>>			</MyOrderDetails>
>>>		</MyOrders>
>>></Enterprise>
>>>
>>>Finally, if i want to remove from the XML file the XSD content , how can do that ?
>>>
>>>The code i use to produce the XML and XSD file is:
>>>
>>>CLOSE DATABASES ALL
>>>OPEN DATABASE (HOME() + [samples\northwind\northwind])
>>>
>>>USE territories IN 0
>>>USE customers IN 0
>>>USE orders IN 0
>>>USE OrderDetails IN 0
>>>
>>>SELECT * ;
>>>	FROM territories ;
>>>	WHERE territoryid = '02116' ;
>>>	into cursor crsTerritory
>>>	
>>>
>>>Select customers.* ;
>>>  from customers ;
>>>  where customerid = 'BONAP' ;
>>>  into Cursor crsCustomer nofilter
>>>
>>>Select t1.* ;
>>>  from orders t1 ;
>>>  inner Join crsCustomer t2 On t1.customerid = t2.customerid ;
>>>  into Cursor crsOrders nofilter
>>>Index On customerid Tag customerid
>>>
>>>Select t1.* ;
>>>  from OrderDetails t1 ;
>>>  inner Join crsOrders t2 On t1.orderid = t2.orderid ;
>>>  into Cursor crsOrdDet nofilter
>>>Index On orderid Tag orderid
>>>
>>>SELECT territories
>>>*set fields TO territorydescription
>>>
>>>Select customers
>>>*SET RELATION TO territorydescription INTO crsOrders In crsCustomer
>>>Set Relation To customerid Into crsOrders In crsCustomer
>>>Set Relation To orderid Into crsOrdDet In crsOrders Additive
>>>
>>>Local loAdapter As Xmladapter ,loAdapter2 As Xmladapter
>>>loAdapter = Createobject('XMLAdapter')
>>>loAdapter.AddTableSchema('crsTerritory',.T.,Strconv('Enterprise',12))
>>>loAdapter.AddTableSchema('crsCustomer',.T.,Strconv('MyCustomer',12))
>>>loAdapter.AddTableSchema('crsOrders',  .T.,Strconv('MyOrders',12),'','',.F.,.F.,.T.)
>>>loAdapter.AddTableSchema('crsOrdDet',  .T.,Strconv('MyOrderDetails',12),'','',.F.,.F.,.T.)
>>>loAdapter.RespectNesting = .T.
>>>loAdapter.ToXML('cMyData','',.T.)
>>>MODIFY FILE cMyData.xml
>>>
>>>
>>>Many thanks,
>>>Best regards,
>>>Luis
>>
>>Hi Luis, check code comments:
>>
>>
>>Close Databases All
>>Open Database (Home() + [samples\northwind\northwind])
>>
>>Use territories In 0
>>Use customers In 0
>>Use orders In 0
>>Use OrderDetails In 0
>>
>>Select * ;
>>	FROM territories ;
>>	WHERE territoryid = '02116'  ;
>>	into Cursor crsTerritory
>>
>>
>>Select customers.* ;
>>	from customers ;
>>	where customerid = 'BONAP' ;
>>	into Cursor crsCustomer nofilter
>>
>>
>>Select t1.* ;
>>	from orders t1 ;
>>	inner Join crsCustomer t2 On t1.customerid = t2.customerid ;
>>	into Cursor crsOrders nofilter
>>Index On customerid Tag customerid
>>
>>Select t1.* ;
>>	from OrderDetails t1 ;
>>	inner Join crsOrders t2 On t1.orderid = t2.orderid ;
>>	into Cursor crsOrdDet nofilter
>>Index On orderid Tag orderid
>>
>>Set Relation To customerid Into crsOrders In crsCustomer
>>Set Relation To orderid Into crsOrdDet In crsOrders
>>
>>*******************************************************************
>>Select crsCustomer
>>Index On customerid Tag customerid
>>Set Relation to '' Into crsCustomer In crsTerritory && cheat 1:1 relation
>>********************************************************************
>>
>>loAdapter = Createobject('XMLAdapter')
>>
>>With loAdapter As Xmladapter
>>
>>************************************************************************
>>	.XMLName = strconv('XML',12) && change root <VFPDATA> TO <XML>
>>	.XMLSchemaLocation = '' && supress XSD
>>	.RespectNesting = .T.  && set this default BEFORE adding tables, then no need to specify for each table
>>************************************************************************
>>
>>	.AddTableSchema('crsTerritory',.T.,Strconv('Enterprise',12))
>>	.AddTableSchema('crsCustomer',.T.,Strconv('MyCustomer',12))
>>	.AddTableSchema('crsOrders',  .T.,Strconv('MyOrders',12))
>>	.AddTableSchema('crsOrdDet',  .T.,Strconv('MyOrderDetails',12))
>>	.ToXML('cMyData','',.T.)
>>
>>Endwith
>>
>>Modify File cMyData.XML
>>
>>
>>
>>
>>Hello Marco,
>>
>>Many thanks for your reply and comments, i will go to test it.
>>
>>Best regards,
>>Luis
>>
>>Hello Marco,
>>
>>Sorry i forget to ask the following, how could i supress Tag OrderId on Node MyOrderDetails without loosing the relation between cursors.
>>I ask this because sometimes that could be necessary, i see another post where use :
>>Select customers
>>SET FIELDS TO (Selection of some fields from cursor)
>>
>>Using the example that you send to me and work like a charm, can i do that ?
>>
>>like that :
>>
>><?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
>><XML>
>>	<Enterprise>
>>		<territoryid>02116</territoryid>
>>		<territorydescription>Boston</territorydescription>
>>		<regionid>1</regionid>
>>		<MyCustomer>
>>			<customerid>BONAP</customerid>
>>			<companyname>Bon app'</companyname>
>>			<contactname>Laurence Lebihan</contactname>
>>			<contacttitle>Owner</contacttitle>
>>			<address>12, rue des Bouchers</address>
>>			<city>Marseille</city>
>>			<postalcode>13008</postalcode>
>>			<country>France</country>
>>			<phone>91.24.45.40</phone>
>>			<fax>91.24.45.41</fax>
>>			<MyOrders>
>>				<orderid>10331</orderid>
>>				<customerid>BONAP</customerid>
>>				<employeeid>9</employeeid>
>>				<orderdate>1996-10-16</orderdate>
>>				<requireddate>1996-11-27</requireddate>
>>				<shippeddate>1996-10-21</shippeddate>
>>				<shipvia>1</shipvia>
>>				<freight>10.1900</freight>
>>				<shipname>Bon app'</shipname>
>>				<shipaddress>12, rue des Bouchers</shipaddress>
>>				<shipcity>Marseille</shipcity>
>>				<shippostalcode>13008</shippostalcode>
>>				<shipcountry>France</shipcountry>
>>				<MyOrderDetails>
>>					<orderid>10331</orderid>  && is possible to remove this TAG
>>					<productid>54</productid>
>>					<unitprice>5.9000</unitprice>
>>					<quantity>15</quantity>
>>					<discount>0.00000</discount>
>>				</MyOrderDetails>
>>			</MyOrders>
>>	</Enterprise>
>></XML>
>>
>>
>>
>>Thanks again,
>>Best regards,
>>Luis
>
>Hi Luis, no.. the set relation to "" is just a trick that works safely if you have a cursor
>with just 1 record on the left side of the relation. VFP has to include the correlated
>colums so the consumer can establish the relation again on parsed cursors from xml.
>
>Hello Marco,
>
>Yes, i understand the trick of relation to [] and is perfect.
>My question is different, i want to have the possibility to choose only fields from cursor crsCustomer and crsOrdDet that i want for building my XML files without broken :
> Set Relation To customerid Into crsOrders In crsCustomer
> Set Relation To orderid Into crsOrdDet In crsOrders
>
>Suppose for cursor crsCustomer i want only fields :
>
><customerid>BONAP</customerid>
><companyname>Bon app'</companyname>
><contactname>Laurence Lebihan</contactname>
>
>
>for cursor crsOrder i want only fields :
>
><orderid>10331</orderid>
><customerid>BONAP</customerid>
><employeeid>9</employeeid>
><orderdate>1996-10-16</orderdate>
>
>
>and for crsOrdDet i want only fields :
>
><productid>54</productid>
><unitprice>5.9000</unitprice>
><quantity>15</quantity>
><discount>0.00000</discount>
>
>
>Many thanks again, because i learn a lot of useful thing that i can use with your examples codes.
>I am very grateful for this.
>
>Best regards,
>Luis

For that matter simply use "set fields to" :
************************************************************************
* set fields: 
select crsCustomer
set fields to customerid,companyname,contactname

select crsOrders
 set fields to orderid,customerid,employeeid,orderdate

select  crsOrdDet
set fields to productid,unitprice,quantity,discount
*************************************************************************
Ps:
Glad it helped you ;-)


Hello Marco,

I need more one time your help, in that case i want to read XML file and put the content on VFP cursor with some name that i want to save.

I see some scripts, but they cannot return any table:
*First:
cFile = "C:\myXmlfiles\cMyDataNew.XML"
* Load XML
oXA = CREATEOBJECT("XmlAdapter")
oXA.RespectNesting = .T.
oXA.LoadXML("C:\myXmlfiles\cMyDataNew.XML",.T.)
MSG(ASTR(oXA.Tables.Count))
FOR i=1 TO oXA.Tables.Count
 *MSG("Fix o LOAD!!")
	oXA.Tables(i).Tocursor()
ENDFOR

*Second:
LOCAL ;
    loAdapter AS XMLAdapter

loAdapter = CREATEOBJECT([XMLAdapter])

WITH loAdapter AS XMLAdapter
     .RespectNesting = .T.
     IF .LoadXML("C:\myXmlfiles\cMyDataNew.XML",.T.)
		*MSG("Fix o LOAD!!")
          ? [The number of tables read is: ] + TRANSFORM(.Tables.Count)
          ? [The first table is: ] + .Tables(1).Alias
          ? [The second table is: ] + .Tables(2).Alias
          ? [The first table is nested into ] + .Tables(1).NestedInto.Alias
     ENDIF
ENDWITH

loAdapter = .NULL.

*Finally:
* your : nfXMLread ( VFP XML PARSER  )
All of them cannot find any tables.
i have create a XML file Without XSD schema ( send in Attach), and my question is Why cannot transform XML file in cursor or cursors, is because my xml file don´t have the XSD ??

Could you please give me some help for solving this because i need to create a VFP program to read my XML, transform into cursor and create sql CRUD transaction .

Many thanks again for all your support.
Best regards,
Luis
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform