Hi,

I have huge XML document containing around 70000000 child nodes. I want to implement paging on this, so that I can fetch a chunk of nodes at time, but as the start position value increases from 10000000 the execution time takes more than a second to execute, is there a any optimized way I can follow.

I have written following code:

public class XQJ
{
  public static void main(String[] args) throws XQException
  {
    XQDataSource xqs = new BaseXXQDataSource();
    xqs.setProperty("serverName", "localhost");
    xqs.setProperty("port", "1984");

    // Change USERNAME and PASSWORD values
    XQConnection conn = xqs.getConnection("admin", "admin");

    XQPreparedExpression xqpe =
    conn.prepareExpression("declare namespace xbrli='http://www.xbrl.org/2003/instance';" +
            " declare variable $doc as xs:string external;" +
            " declare variable $start as xs:integer external;" +
            " declare variable $pageSize as xs:integer external;" +
            " let $allMatches := doc($doc)/xbrli:xbrl/*" +
            " return subsequence($allMatches,$start,$pageSize)");
//            " return $matches");
   
    xqpe.bindString(new QName("doc"), "1389962424906/1389962424906/facts.xml", null);
    int totalRecords = 70000000;
    int pageSize = 10000;
    int noOfPages = totalRecords/pageSize;
    long startTime = 0;
    int start = 0;
    for(int i=0; i<noOfPages; i++){
        startTime = System.currentTimeMillis();
        start = i*pageSize;
   
        xqpe.bindInt(new QName("start"), start, null);
        xqpe.bindInt(new QName("pageSize"), pageSize, null);
       
        XQResultSequence rs = xqpe.executeQuery();
       
//        while(rs.next()){}
//      System.out.println(rs.getItemAsString(null));
   
//        System.out.println(start + " : " + (System.currentTimeMillis()-startTime));
    }
    System.out.println(start + " : " + (System.currentTimeMillis()-startTime));
    conn.close();
  }