JavaScript Editor js editor     Web development 



Main Page

XMLAdapter is a "two-way" class. You can import XML and its contained schema to create tables, or you can create and generate XML from tables.

An XMLAdapter object stores object references to XML Schema and Document Object Model (DOM) nodes. It does not store actual XML schema information or content. An XMLAdapter object contains a Tables collection that contains one or more XMLTable objects and describes XML as Visual FoxPro cursors along with any relational information. Each XMLTable object can also contain a child XMLTable, and, at most, a Fields collection with one or more XMLField objects.

Note:
The XMLAdapter class requires Microsoft XML Core Services (MSXML) 4.0 Service Pack 1 (SP1) or later.

Using the XMLAdapter class, you can perform the following tasks:

XMLAdapter

Remarks

If you use an XMLAdapter object to convert XDR schema to XSD schema, you must change the XMLAdapterВ XMLNamespace property; otherwise, the XML parser cannot reload the XML. The following example illustrates this scenario:

В Copy Code
TEXT TO cXML NOSHOW
<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
   xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
   xmlns:rs='urn:schemas-microsoft-com:rowset'
   xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
   <s:ElementType name='row' content='eltOnly'>
      <s:AttributeType name='xmlfield' rs:number='1' 
         rs:writeunknown='true' rs:nullable='true'>
   <s:datatype dt:type='number' rs:dbtype='currency' dt:maxLength='8'
      rs:scale='4' rs:precision='6' />
</s:AttributeType>
      <s:extends type='rs:rowbase'/>
   </s:ElementType>
</s:Schema>
<rs:data>
   <z:row xmlfield='12.12'/>
</rs:data>
</xml>
ENDTEXT

CLOSE DATABASES ALL
CLEAR

LOCAL oXMLAdapter as XMLAdapter
oXMLAdapter = NEWOBJECT('XMLAdapter') 
oXMLadapter.LoadXML(cXML) 
IF oXMLAdapter.Tables.Item(1).Fields.Item(1).DataType <> "Y" THEN
   ? 'Failed'
ELSE
   oXMLAdapter.Tables.Item(1).ToCursor()
   oXMLAdapter.XMLNamespace=""
   oXMLAdapter.ReleaseXML(.F.) 
   oXMLAdapter.XMLSchemaLocation='c:\myxmlfile.xsd'
   oXMLAdapter.ToXML('c:\myxmlfile.xml',,.T.) 
   oXMLadapter2 = NEWOBJECT('xmladapter') 
   oXMLAdapter2.XMLSchemaLocation='c:\myxmlfile.xsd'
   oXMLAdapter2.LoadXML('c:\myxmlfile.xml',.T.,.T.) 
ENDIF

When the schema is missing or not available, you can specify a schema that Visual FoxPro can use by setting the XMLAdapterВ XMLSchemaLocation property. You must specify this property before calling LoadXML. When Visual FoxPro executes LoadXML, Visual FoxPro looks for the schema in the following order:

  • Inline schema

  • External schema as specified in the XML document

  • Schema as specified by the XMLSchemaLocation property

The following code creates an XMLAdapter object with a Tables collection that remains empty until you load valid XML into the XMLAdapter object:

В Copy Code
oMyAdapter=CREATEOBJECT("xmladapter")

The XML and XML schema data you retrieve using the XMLAdapterВ LoadXML method remains in memory until they are replaced by a subsequent call to LoadXML or when they are specifically released when you call the XMLAdapterВ ReleaseXML method.

Nested TablesВ В В The following table describes how XMLAdapter treats nested tables as either individual tables or as a whole table depending on the XML data source.

XML data source Description

ADO.NET DataSet

XMLAdapter considers each nested table as a separate table, which you can convert to a Visual FoxPro cursor. When the XML schema is analyzed, the XMLAdapterВ LoadXML and Attach methods create an individual XMLTable object for each nested table and adds it to the Tables collection. You can then use the XMLTableВ ToCursor, ChangesToCursor, and ApplyDiffgram methods to obtain data for each table.

SQL XML

XMLAdapter considers each nested table as inseparable from the parent table. When data is retrieved, the final result of a join operation between those tables is represented as a single result. If multiple levels of nesting exist, such as a child table containing a child table and so on, this single result contains data from a join operation between all tables in the hierarchy.

The XMLAdapterВ LoadXML and Attach methods create XMLTable objects for all tables. However, only the XMLTable object for the top-level parent table is added to the Tables collection. This XMLTable object represents the parent table and provides access to the single and final result from the join operation through the XMLTableВ ToCursor method. XMLTable objects for child tables are linked to their parents through the ChildTable and ParentTable properties. However, no way exists to obtain data from individual tables in the chain.

See Also



JavaScript Editor js editor     Web development