+++ /dev/null
-/*\r
- * Ext JS Library 2.2.1\r
- * Copyright(c) 2006-2009, Ext JS, LLC.\r
- * licensing@extjs.com\r
- * \r
- * http://extjs.com/license\r
- */\r
-\r
-/**\r
- * @class Ext.data.XmlReader\r
- * @extends Ext.data.DataReader\r
- * Data reader class to create an Array of {@link Ext.data.Record} objects from an XML document\r
- * based on mappings in a provided {@link Ext.data.Record} constructor.<br><br>\r
- * <p>\r
- * <em>Note that in order for the browser to parse a returned XML document, the Content-Type\r
- * header in the HTTP response must be set to "text/xml" or "application/xml".</em>\r
- * <p>\r
- * Example code:\r
- * <pre><code>\r
-var Employee = Ext.data.Record.create([\r
- {name: 'name', mapping: 'name'}, // "mapping" property not needed if it's the same as "name"\r
- {name: 'occupation'} // This field will use "occupation" as the mapping.\r
-]);\r
-var myReader = new Ext.data.XmlReader({\r
- totalRecords: "results", // The element which contains the total dataset size (optional)\r
- record: "row", // The repeated element which contains row information\r
- id: "id" // The element within the row that provides an ID for the record (optional)\r
-}, Employee);\r
-</code></pre>\r
- * <p>\r
- * This would consume an XML file like this:\r
- * <pre><code>\r
-<?xml version="1.0" encoding="UTF-8"?>\r
-<dataset>\r
- <results>2</results>\r
- <row>\r
- <id>1</id>\r
- <name>Bill</name>\r
- <occupation>Gardener</occupation>\r
- </row>\r
- <row>\r
- <id>2</id>\r
- <name>Ben</name>\r
- <occupation>Horticulturalist</occupation>\r
- </row>\r
-</dataset>\r
-</code></pre>\r
- * @cfg {String} totalRecords The DomQuery path from which to retrieve the total number of records\r
- * in the dataset. This is only needed if the whole dataset is not passed in one go, but is being\r
- * paged from the remote server.\r
- * @cfg {String} record The DomQuery path to the repeated element which contains record information.\r
- * @cfg {String} success The DomQuery path to the success attribute used by forms.\r
- * @cfg {String} id The DomQuery path relative from the record element to the element that contains\r
- * a record identifier value.\r
- * @constructor\r
- * Create a new XmlReader.\r
- * @param {Object} meta Metadata configuration options\r
- * @param {Object} recordType Either an Array of field definition objects as passed to\r
- * {@link Ext.data.Record#create}, or a Record constructor object created using {@link Ext.data.Record#create}.\r
- */\r
-Ext.data.XmlReader = function(meta, recordType){\r
- meta = meta || {};\r
- Ext.data.XmlReader.superclass.constructor.call(this, meta, recordType || meta.fields);\r
-};\r
-Ext.extend(Ext.data.XmlReader, Ext.data.DataReader, {\r
- /**\r
- * This method is only used by a DataProxy which has retrieved data from a remote server.\r
- * @param {Object} response The XHR object which contains the parsed XML document. The response is expected\r
- * to contain a property called <tt>responseXML</tt> which refers to an XML document object.\r
- * @return {Object} records A data block which is used by an {@link Ext.data.Store} as\r
- * a cache of Ext.data.Records.\r
- */\r
- read : function(response){\r
- var doc = response.responseXML;\r
- if(!doc) {\r
- throw {message: "XmlReader.read: XML Document not available"};\r
- }\r
- return this.readRecords(doc);\r
- },\r
-\r
- /**\r
- * Create a data block containing Ext.data.Records from an XML document.\r
- * @param {Object} doc A parsed XML document.\r
- * @return {Object} records A data block which is used by an {@link Ext.data.Store} as\r
- * a cache of Ext.data.Records.\r
- */\r
- readRecords : function(doc){\r
- /**\r
- * After any data loads/reads, the raw XML Document is available for further custom processing.\r
- * @type XMLDocument\r
- */\r
- this.xmlData = doc;\r
- var root = doc.documentElement || doc;\r
- var q = Ext.DomQuery;\r
- var recordType = this.recordType, fields = recordType.prototype.fields;\r
- var sid = this.meta.id;\r
- var totalRecords = 0, success = true;\r
- if(this.meta.totalRecords){\r
- totalRecords = q.selectNumber(this.meta.totalRecords, root, 0);\r
- }\r
-\r
- if(this.meta.success){\r
- var sv = q.selectValue(this.meta.success, root, true);\r
- success = sv !== false && sv !== 'false';\r
- }\r
- var records = [];\r
- var ns = q.select(this.meta.record, root);\r
- for(var i = 0, len = ns.length; i < len; i++) {\r
- var n = ns[i];\r
- var values = {};\r
- var id = sid ? q.selectValue(sid, n) : undefined;\r
- for(var j = 0, jlen = fields.length; j < jlen; j++){\r
- var f = fields.items[j];\r
- var v = q.selectValue(f.mapping || f.name, n, f.defaultValue);\r
- v = f.convert(v, n);\r
- values[f.name] = v;\r
- }\r
- var record = new recordType(values, id);\r
- record.node = n;\r
- records[records.length] = record;\r
- }\r
-\r
- return {\r
- success : success,\r
- records : records,\r
- totalRecords : totalRecords || records.length\r
- };\r
- }\r
-});
\ No newline at end of file