技术开发 频道

Ext2.0 与服务端XML的交互(扩展Ext.data.XmlReader )


【IT168技术文档】

  本文案例如下:后台使用C#写的webservice,返回一个xml串作为结果集。前端需要对xml结果解析,放入到一个表格中。

  以前没用Ext的解决办法是 :前台写xsl 转换xml ,把结果放入某个div内。。。优点是灵活多样,缺点是需要手写xsl代码,并对开发人员的dom以及css技术有比较高的要求。
  现在有了漂亮贼酷的Ext ,没有理由不选它。 于是用Ext.data.XmlReader 读取服务器传回来的xml,本以为跟读取xml文件一样,读取url就ok了。但是代码一写。问题出现了。
  我的代码如下:
1 2 Ext.onReady(function(){ 3 var cm = new Ext.grid.ColumnModel([ 4 {header:'编号',dataIndex:'id'}, 5 {header:'性别',dataIndex:'sex'}, 6 {header:'姓名',dataIndex:'name'}, 7 {header:'描述',dataIndex:'descn'} 8 ]); 9 cm.defaultSortable = true; 10 11 var CARTOON_WSDL_ADDR = "http://localhost/JMAMCCTV/JUUMSystemService/UUMSystemService.asmx"; 12 13 var dataStore = new Ext.data.Store({ 14 url: CARTOON_WSDL_ADDR+'/testXmlpage', 15 reader: new Ext.data.XmlReader({ 16 totalRecords: "results", 17 record: "item" 18 }, [ 19 { name: "id" },{ name: "sex" },{ name: "name" },{ name: "descn" } 20 ]) 21 }); 22 23 24 25 var grid = new Ext.grid.GridPanel({ 26 renderTo: 'testLayout', 27 ds: dataStore, 28 cm: cm, 29 height:200, 30 width:500, 31 title: 'PagerCkp' 32 }); 33 34 dataStore.load({ 35 params: { 36 pageindex:1,pageCount:2 37 }, 38 callback: function(r, options, success) { 39 //alert(dataStore.getTotalCount() ); //取得记录总数。即 results 节点中的值 40 //alert(dataStore.getCount() ); //取得记录数。即 返回的xml中真实的记录数 41 if (success && r.length > 0) { 42 var ss = r[0].get("id"); 43 //alert(ss); 44 } 45 else{ 46 } 47 } 48 }) 49 });
  alert出来的dataStore.getCount始终是0 。也就是 没有读出来webservice返回的xml串。

  仔细查找问题所在。查看了Ext.data.XmlReader类 的源码,看到原来Ext.data.XmlReader 直接使用了 responseXML:
1 var doc = response.responseXML; 2 if(!doc) { 3 throw {message: "XmlReader.read: XML Document not available"}; 4 } 5 return this.readRecords(doc);
  而大家知道webservice返回的responseXML 肯定是一个Xml对象。你的xml串就是被转义并放在 responseXML的根节点的text里的。比如本例:responseXML
  对象的 xml 如下:
<?xml version=\"1.0\"?> <string xmlns=\"http://www.mycompany.com/webservices/\">&lt;dataset&gt; &lt;results&gt;10&lt;/results&gt;&lt;item&gt;&lt;id&gt;1&lt;/id&gt;&lt;sex&gt;&lt;/sex&gt;&lt;name&gt;JasonWoo&lt;/name&gt; &lt;descn&gt;US.Ny&lt;/descn&gt;&lt;/item&gt;&lt;item&gt;&lt;id&gt;2&lt;/id&gt;&lt;sex&gt;&lt;/sex&gt;&lt;name&gt;Lucy&lt;/name&gt;&lt;descn&gt;CN.BJ&lt;/descn&gt; &lt;/item&gt;&lt;/dataset&gt;</string>
0
相关文章