Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Tool for hierarchy XML
Message
From
01/08/2003 14:55:35
 
 
To
01/08/2003 10:37:34
General information
Forum:
Visual FoxPro
Category:
XML, XSD
Miscellaneous
Thread ID:
00812689
Message ID:
00815993
Views:
8
>Thanks
>here is a sample:
>I use text merge endtext to fill in the data and that works just fine.
>I was just wondering if there is a better way
>
>
><?xml version="1.0"?>
><!--File Name: CT_AP001.XML -->
><CTAPI001A>
>   <CT_AP001_HDR>
>      	<BUSINESS_UNIT>OTTIU</BUSINESS_UNIT>
>        <VOUCHER_ID>1</VOUCHER_ID>
>	<CT_VCHR_INTFC_SRCE>OTT</CT_VCHR_INTFC_SRCE>
>	<ORIGIN>OTT</ORIGIN>
>	<INVOICE_ID>OTT2189</INVOICE_ID>
>        <INVOICE_DT>04/04/2003</INVOICE_DT>
>        <ACCOUNTING_DT>04/04/2003</ACCOUNTING_DT>
>        <VENDOR_SETID>OTTIU</VENDOR_SETID>
>        <NAME1>PELER, Jiody</NAME1>
>        <NAME2>EXEC</NAME2>
>        <VNDR_NAME_SHRT_USR>045991234</VNDR_NAME_SHRT_USR>
>        <CT_RECEIPT_DT>12/04/2003</CT_RECEIPT_DT>
>        <COUNTRY>USA</COUNTRY>
>        <ADDRESS1>36 MIDDLE AVE</ADDRESS1>
>        <CITY>MyTown</CITY>
>        <STATE>CT</STATE>
>        <POSTAL>06109</POSTAL>
>        <OPRID>MaidelisI</OPRID>
>        <GROSS_AMT>524.44</GROSS_AMT>
>        <CT_AP001_PMNT>
>          <BUSINESS_UNIT>OTTIU</BUSINESS_UNIT>
>          <VOUCHER_ID>1</VOUCHER_ID>
>          <MESSAGE_CD>UNCLAI</MESSAGE_CD>
>          <PYMNT_GROSS_AMT>524.44</PYMNT_GROSS_AMT>
>          <PYMNT_HANDLING_CD>RE</PYMNT_HANDLING_CD>
>         </CT_AP001_PMNT>
>        <CT_AP001_LINE>
>          <BUSINESS_UNIT>OTTIU</BUSINESS_UNIT>
>          <VOUCHER_ID>1</VOUCHER_ID>
>          <VOUCHER_LINE_NUM>1</VOUCHER_LINE_NUM>
>          <LINE_DESCR>PAYMENT IN FULL</LINE_DESCR>
>          <MERCHANDISE_AMT>524.44</MERCHANDISE_AMT>
>          <CT_AP001_DIST>
>             <BUSINESS_UNIT>OTTIU</BUSINESS_UNIT>
>             <VOUCHER_ID>1</VOUCHER_ID>
>             <VOUCHER_LINE_NUM>1</VOUCHER_LINE_NUM>
>             <DISTRIB_LINE_NUM>1</DISTRIB_LINE_NUM>
>             <MERCHANDISE_AMT>524.44</MERCHANDISE_AMT>
>             <BUSINESS_UNIT_GL>STATE</BUSINESS_UNIT_GL>
>             <ACCOUNT>54830</ACCOUNT>
>             <FUND_CODE>11000</FUND_CODE>
>             <CLASS_FLD>12002</CLASS_FLD>
>             <PROGRAM_CODE>13019</PROGRAM_CODE>
>             <PROJECT_ID>OTT_NONPROJECT</PROJECT_ID>
>             <DEPTID>OTT14620</DEPTID>
>             <BUDGET_DT>04/04/2004</BUDGET_DT>
>             <BUDGET_REF>2004</BUDGET_REF>
>          </CT_AP001_DIST>
>	 </CT_AP001_LINE>
>       </CT_AP001_HDR>
>     </CTAPI001A>
>
>
>
>
>
>
>
>
>
>
>>>>>Any free tool for VFP6/7 to convert hierarchy XML to cursor and so forth ?
>>>>
>>>>Visual FoxPro 8.0 supports this. Do you plan to upgrade to VFP 8.0?
>>>
>>>How?
>>>
>>>I tried that but it puts the child record data into a field instead if creating a cursor for each table in the hierarchy
>>>
>>>Peter
>>
>>Hi Peter,
>>
>>Ken was talking about new XMLAdapter class. Have you tried it?
>>If you post a small example of XML along with XML schema, I'll probably be able to help you.
>>
>>Thanks,
>>Aleksey.

Hi Peter,

Here is the example (I've changed date value to use XML Date format):
CLOSE DATABASES all
CLEAR
SET MEMOWIDTH TO 150

TEXT TO cXML NOSHOW 
<?xml version="1.0"?>
<!--File Name: CT_AP001.XML -->
<CTAPI001A>
	<CT_AP001_HDR>
		<BUSINESS_UNIT>OTTIU</BUSINESS_UNIT>
        <OPRID>MaidelisI</OPRID>
        <GROSS_AMT>524.44</GROSS_AMT>
        <CT_AP001_LINE>
          <BUSINESS_UNIT>OTTIU</BUSINESS_UNIT>
          <VOUCHER_LINE_NUM>1</VOUCHER_LINE_NUM>
          <LINE_DESCR>PAYMENT IN FULL</LINE_DESCR>
          <MERCHANDISE_AMT>524.44</MERCHANDISE_AMT>
          <CT_AP001_DIST>
             <BUSINESS_UNIT>OTTIU</BUSINESS_UNIT>
             <VOUCHER_LINE_NUM>1</VOUCHER_LINE_NUM>
             <DISTRIB_LINE_NUM>1</DISTRIB_LINE_NUM>
             <MERCHANDISE_AMT>524.44</MERCHANDISE_AMT>
             <BUDGET_DT>2004-04-04</BUDGET_DT>
             <BUDGET_REF>2004</BUDGET_REF>
          </CT_AP001_DIST>     
		</CT_AP001_LINE>
	</CT_AP001_HDR> 
</CTAPI001A>
ENDTEXT

*?cXML

LOCAL oXA as XMLAdapter, oXT as XMLTable, oXF as XMLField


?" Ex 1 - populate Tables collection manually."
oXA=CREATEOBJECT("XMLAdapter")

oXA.LoadXML(cXML,.F.)

oXT=CreateTable(oXA,"CT_AP001_HDR")
CreateField(oXT,"BUSINESS_UNIT","C",5,-1,.F.)
CreateField(oXT,"OPRID","C",10,-1,.F.)
CreateField(oXT,"GROSS_AMT","B",-1,2,.F.)

oXT=CreateTable(oXA,"CT_AP001_LINE")
CreateField(oXT,"BUSINESS_UNIT","C",5,-1,.F.)
CreateField(oXT,"VOUCHER_LINE_NUM","I",-1,-1,.F.)
CreateField(oXT,"LINE_DESCR","C",20,-1,.F.)
CreateField(oXT,"MERCHANDISE_AMT","B",-1,2,.F.)

oXT=CreateTable(oXA,"CT_AP001_DIST")
CreateField(oXT,"BUSINESS_UNIT","C",5,-1,.F.)
CreateField(oXT,"VOUCHER_LINE_NUM","I",-1,-1,.F.)
CreateField(oXT,"DISTRIB_LINE_NUM","I",-1,-1,.F.)
CreateField(oXT,"MERCHANDISE_AMT","B",-1,2,.F.)
CreateField(oXT,"BUDGET_DT","D",-1,-1,.F.)
CreateField(oXT,"BUDGET_REF","I",-1,-1,.F.)

GetData(oXA)
oXA=null
CLOSE DATABASES ALL 

?" Ex 2 - Use XML schema."

TEXT TO cXMLShema NOSHOW 
<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
<xsd:schema id="CTAPI001A" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
	<xsd:element name="CTAPI001A" msdata:IsDataSet="true">
		<xsd:complexType>
			<xsd:choice maxOccurs="unbounded">
				<xsd:element name="CT_AP001_HDR" minOccurs="0" maxOccurs="unbounded">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="BUSINESS_UNIT">
								<xsd:simpleType>
									<xsd:restriction base="xsd:string">
										<xsd:maxLength value="5"/>
									</xsd:restriction>
								</xsd:simpleType>
							</xsd:element>
							<xsd:element name="OPRID">
								<xsd:simpleType>
									<xsd:restriction base="xsd:string">
										<xsd:maxLength value="10"/>
									</xsd:restriction>
								</xsd:simpleType>
							</xsd:element>
							<xsd:element name="GROSS_AMT" type="xsd:double"/>
				<xsd:element name="CT_AP001_LINE" minOccurs="0" maxOccurs="unbounded">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="BUSINESS_UNIT">
								<xsd:simpleType>
									<xsd:restriction base="xsd:string">
										<xsd:maxLength value="5"/>
									</xsd:restriction>
								</xsd:simpleType>
							</xsd:element>
							<xsd:element name="VOUCHER_LINE_NUM" type="xsd:int"/>
							<xsd:element name="LINE_DESCR">
								<xsd:simpleType>
									<xsd:restriction base="xsd:string">
										<xsd:maxLength value="20"/>
									</xsd:restriction>
								</xsd:simpleType>
							</xsd:element>
							<xsd:element name="MERCHANDISE_AMT" type="xsd:double"/>
				<xsd:element name="CT_AP001_DIST" minOccurs="0" maxOccurs="unbounded">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="BUSINESS_UNIT">
								<xsd:simpleType>
									<xsd:restriction base="xsd:string">
										<xsd:maxLength value="5"/>
									</xsd:restriction>
								</xsd:simpleType>
							</xsd:element>
							<xsd:element name="VOUCHER_LINE_NUM" type="xsd:int"/>
							<xsd:element name="DISTRIB_LINE_NUM" type="xsd:int"/>
							<xsd:element name="MERCHANDISE_AMT" type="xsd:double"/>
							<xsd:element name="BUDGET_DT" type="xsd:date"/>
							<xsd:element name="BUDGET_REF" type="xsd:int"/>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
			</xsd:choice>
		</xsd:complexType>
	</xsd:element>
</xsd:schema>
ENDTEXT

DELETE FILE MySchema.xsd
STRTOFILE(cXMLShema,"MySchema.xsd")

oXA=CREATEOBJECT("XMLAdapter")
oXA.XMLSchemaLocation="MySchema.xsd"
oXA.LoadXML(cXML,.F.)

GetData(oXA)

FUNCTION GetData(oXA)
	FOR EACH oXT IN oXA.Tables
		oXT.ToCursor()
		SELECT (oXT.Alias)
		LIST
		?
	ENDFOR
ENDFUNC

FUNCTION CreateTable(oXA,cName)
	LOCAL oXT as XMLTable
	oXT=CREATEOBJECT("XMLTable")
	oXT.Alias=cNAme
	oXT.XMLName=STRCONV(cName,5)
	oXA.Tables.Add(oXT,oXT.XMLName)
	RETURN oXT
ENDFUNC 

FUNCTION CreateField(oXT,cName,cType,nMaxLength,nFractionDigits,lAttribute)
	LOCAL oXF as XMLField
	oXF=CREATEOBJECT("XMLField")
	oXF.Alias=cNAme
	oXF.XMLName=STRCONV(cName,5)
	oXF.DataType=cType
	oXF.MaxLength=nMaxLength
	oXF.FractionDigits=nFractionDigits
	oXF.IsAttribute=lAttribute
	oXT.Fields.Add(oXF,oXF.XMLName)
	RETURN oXF
ENDFUNC 
Thanks,
Aleksey.
Previous
Reply
Map
View

Click here to load this message in the networking platform