diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp
index 1be825b..138514d 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp
@@ -27,6 +27,7 @@
 #define COPY_XML_RETRY_TIMES 3
 
 static qser_data_call_evt_cb_t s_data_call_cb = NULL;
+static xmlDocPtr apn_table_xml_pdoc = NULL;
 const int apndb_offset = 683;
 
 void lynq_ipv4_aton_urc(lynq_data_call_response_v11_t *libdata,qser_data_call_state_s *data_res)
@@ -385,18 +386,19 @@
 {
     int node_num = 0;
     char temp_buff[12];
-    xmlDocPtr pdoc = NULL;
+    //xmlDocPtr apn_table_xml_pdoc = NULL;
     xmlNodePtr node = NULL;
     xmlNodePtr tmp_node = NULL;
     xmlNodePtr sum_node = NULL;
-    pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
-    if(NULL == pdoc)
+
+//    apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
     {
         LYERRLOG("open xml file error");
         goto FAILED;
     }
     
-    node = xmlDocGetRootElement(pdoc);
+    node = xmlDocGetRootElement(apn_table_xml_pdoc);
     if (NULL == node)
     {
         LYERRLOG("xmlDocGetRootElement() error");
@@ -441,15 +443,16 @@
     xmlNewProp(tmp_node,BAD_CAST"password",(xmlChar *)apn->password);
     xmlNewProp(tmp_node,BAD_CAST"apn_type",(xmlChar *)apn->apn_type);
     xmlAddChild(node,tmp_node);
-    xmlSaveFormatFileEnc(data_xml_path, pdoc, "UTF-8", 1);
-    xmlFreeDoc(pdoc);
+    xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
+   
+//    xmlFreeDoc(apn_table_xml_pdoc);
     return RESULT_OK;
     
     FAILED:
-    if (pdoc)
+    /* if (apn_table_xml_pdoc)
     {
-        xmlFreeDoc(pdoc);
-    }
+        xmlFreeDoc(apn_table_xml_pdoc);
+    }*/
     return RESULT_ERROR;
 }
 
@@ -457,17 +460,17 @@
 {
     int node_num = 0;
     char temp_buff[12];
-    xmlDocPtr pdoc = NULL;
+    //xmlDocPtr apn_table_xml_pdoc = NULL;
     xmlNodePtr node = NULL;
     xmlNodePtr modify_node = NULL;
-    pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
-    if(NULL == pdoc)
+    // apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
     {
         LYERRLOG("open xml file error");
         goto FAILED;
     }
     
-    node = xmlDocGetRootElement(pdoc);
+    node = xmlDocGetRootElement(apn_table_xml_pdoc);
     if (NULL == node)
     {
         LYERRLOG("xmlDocGetRootElement() error");
@@ -522,15 +525,15 @@
         modify_node = modify_node->next;
         node_num++;
     }
-    xmlSaveFormatFileEnc(data_xml_path, pdoc, "UTF-8", 1);
-    xmlFreeDoc(pdoc);
+    xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
+//    xmlFreeDoc(apn_table_xml_pdoc);
     return RESULT_OK;
 
     FAILED:
-    if (pdoc)
-    {
-        xmlFreeDoc(pdoc);
-    }
+    // if (apn_table_xml_pdoc)
+    // {
+    //     xmlFreeDoc(apn_table_xml_pdoc);
+    // }
     return RESULT_ERROR;
 }
 
@@ -538,17 +541,17 @@
 {
     int node_num = 0;
     char temp_buff[12];
-    xmlDocPtr pdoc = NULL;
+    //xmlDocPtr apn_table_xml_pdoc = NULL;
     xmlNodePtr node = NULL;
     xmlNodePtr modify_node = NULL;
-    pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
-    if(NULL == pdoc)
+//    apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
     {
         LYERRLOG("open xml file error");
         goto FAILED;
     }
     
-    node = xmlDocGetRootElement(pdoc);
+    node = xmlDocGetRootElement(apn_table_xml_pdoc);
     if (NULL == node)
     {
         LYERRLOG("xmlDocGetRootElement() error");
@@ -579,15 +582,15 @@
     xmlSetProp(modify_node,BAD_CAST"username",(xmlChar *)apn->username);
     xmlSetProp(modify_node,BAD_CAST"password",(xmlChar *)apn->password);
     xmlSetProp(modify_node,BAD_CAST"apn_type",(xmlChar *)apn->apn_type);
-    xmlSaveFormatFileEnc(data_xml_path, pdoc, "UTF-8", 1);
-    xmlFreeDoc(pdoc);
+    xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
+//    xmlFreeDoc(apn_table_xml_pdoc);
     return RESULT_OK;
 
     FAILED:
-    if (pdoc)
-    {
-        xmlFreeDoc(pdoc);
-    }
+    // if (apn_table_xml_pdoc)
+    // {
+    //     xmlFreeDoc(apn_table_xml_pdoc);
+    // }
     return RESULT_ERROR;
 }
 
@@ -595,18 +598,18 @@
 int apn_xml_query(unsigned char profile_idx,qser_apn_info_s *apn)
 {
     int node_num = 0;
-    xmlDocPtr pdoc = NULL;
+    //xmlDocPtr apn_table_xml_pdoc = NULL;
     xmlNodePtr node = NULL;
     xmlNodePtr modify_node = NULL;
     unsigned char temp = NULL;
-    pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
-    if(NULL == pdoc)
+//    apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
     {
         LYERRLOG("open xml file error");
         goto FAILED;
     }
     
-    node = xmlDocGetRootElement(pdoc);
+    node = xmlDocGetRootElement(apn_table_xml_pdoc);
     if (NULL == node)
     {
         LYERRLOG("xmlDocGetRootElement() error");
@@ -650,34 +653,34 @@
     strncpy(apn->username,(char *)xmlGetProp(modify_node, "username"), QSER_APN_USERNAME_SIZE);
     strncpy(apn->password,(char *)xmlGetProp(modify_node, "password"), QSER_APN_PASSWORD_SIZE);
     strncpy(apn->apn_type,(char *)xmlGetProp(modify_node, "apn_type"), QSER_APN_NAME_SIZE);
-    xmlSaveFormatFileEnc(data_xml_path, pdoc, "UTF-8", 1);
-    xmlFreeDoc(pdoc);
+//    xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
+//    xmlFreeDoc(apn_table_xml_pdoc);
     return RESULT_OK;
 
     FAILED:
-    if (pdoc)
-    {
-        xmlFreeDoc(pdoc);
-    }
+    // if (apn_table_xml_pdoc)
+    // {
+    //     xmlFreeDoc(apn_table_xml_pdoc);
+    // }
     return RESULT_ERROR;
 }
 
 int apn_xml_query_list(qser_apn_info_list_s *apn_list)
 {
     int node_num = 0;
-    xmlDocPtr pdoc = NULL;
+    //xmlDocPtr apn_table_xml_pdoc = NULL;
     xmlNodePtr node = NULL;
     xmlNodePtr modify_node = NULL;
     xmlChar *temp_char;
     char temp[64];
-    pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
-    if(NULL == pdoc)
+//    apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
     {
         LYERRLOG("open xml file error");
         goto FAILED;
     }
     
-    node = xmlDocGetRootElement(pdoc);
+    node = xmlDocGetRootElement(apn_table_xml_pdoc);
     if (NULL == node)
     {
         LYERRLOG("xmlDocGetRootElement() error");
@@ -705,15 +708,15 @@
         modify_node = modify_node->next;
     }
     apn_list->cnt = node_num;
-    xmlSaveFormatFileEnc(data_xml_path, pdoc, "UTF-8", 1);
-    xmlFreeDoc(pdoc);
+//    xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
+//    xmlFreeDoc(apn_table_xml_pdoc);
     return RESULT_OK;
 
     FAILED:
-    if (pdoc)
-    {
-        xmlFreeDoc(pdoc);
-    }
+    // if (apn_table_xml_pdoc)
+    // {
+    //     xmlFreeDoc(apn_table_xml_pdoc);
+    // }
     return RESULT_ERROR;
 }
 
@@ -973,13 +976,22 @@
         return RESULT_ERROR;
     }
     qser_cb_pthread_create();
+    apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
+    {
+        LYERRLOG("open xml file error");
+        return RESULT_ERROR;
+    }
     return RESULT_OK;
 }
 
 void qser_data_call_destroy(void)
 {
     LYINFLOG("[%s] start [%d]",__FUNCTION__,__LINE__);
-    
+    if(apn_table_xml_pdoc)
+    {
+        xmlFreeDoc(apn_table_xml_pdoc);
+    }
     lynq_deinit_data();
     qser_cb_pthread_cancel();
     s_data_call_cb = NULL;
