23)问:数据分割成若干个小的xml文档是可以的,但是如何进行多次读取?如果是datapointer的话,是否先将datapointer指向第一个文件,等第一个文件遍历完之后再将其指向下一个文件,以此类推?这样如何保证内存的使用不会过大,在datapointer指向下一个文件之前是否需要将原来加载的数据清除,如何清除?或者是否有更好的方法实现多个数据文件多次读取。望能举例说明。
答:在OpenFace应用程序中,<dataset>就提供了一种封装XML数据的方法。取决于数据源的种类,数据集可以使动态的也可以是静态的。当数据集通过”type=http”显式地声明时,src属性的值就解译为一个URL,此时数据集在运行时装载数据。如果src数据缺省,那么它表达的数据就应该包含在<dataset>标签内,于是数据直接编译进应用程序。
当我们说HTTP数据集是动态的时,即意味着我们可以使用程序方式来重新装载数据。具体方法是:调用数据集对象的doRequest()方法;或如果request属性被设置为true,通过通过调用setSrc(),setQueryString(),或setQueryParam()来改变数据集的URL及请求的参数(如果是一个静态的XML是不需要请求参数的)。
通过改变数据集URL就达到了一个dataset指向多个xml文档,这样避免了一次一下子载入很大的一个文档。上面几个函数具体请见编程参考手册dataset部分。
下面的例子,按数字键1请求data1.xml,按数字键2请求data2.xml。
<canvas width="240" height="320" >
<dataset name="mydata" type="http">
</dataset>
<simplelayout axis="y" spacing="5"/>
<text y="10" fontsize="20" resize="true" datapath="mydata:/myXML/text()"/>
<text id="tmp" fontsize="20" resize="true" text="hello"/>
<handler name="onkeydown" reference="LzKeys" args="key">
switch(key){
case 49:
mydata.setSrc("http://222.128.6.118/test/data1.xml");
mydata.doRequest();
break;
case 50:
mydata.setSrc("http://222.128.6.118/test/data2.xml");
mydata.doRequest();
break;
}
tmp.setText(""+key);
</handler>
</canvas>
周一, 07/14/2008 - 03:44 — xhm1027
运行doRequest()方法时能在界面上显示诸如“数据采集中,请等待.....”的效果吗?
我看了,用ajax可以做到,但是直接用数据集的doRequest方法能实现吗?