Từ 1 tới 1 trên tổng số 1 kết quả

Đề tài: Tạo file XML Trong VC++ 6.0

  1. #1
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Mặc định Tạo file XML Trong VC++ 6.0

    Chào các bạn. chắc là về XML công phu của nó như thế nào anh em cũng đã biết rồi nhỉ. trong khi làm bài tập mình có lên codeproject search được cái "bảo bối" này, nay mình đưa lên đây cho anh em cùng nghiên cứu.

    trên trang codeproject tác giả bài viết cũng đã giới thiệu và nói về nó rồi. nhưng ở đây mình xin "phụ đề" bằng tiếng Việt.


    khi bạn cần xuất dữ liệu ra dưới định dạng XML. vì trong VC++(bản 6) nó không hỗ trợ mình cách đọc và ghi XML vậy khi chúng ta cần phát triển sản phẩm của mình có xuất ra XML thì cần phải làm thế nào nếu chúng ta phát triển chúng trên VC6.
    có 2 cách là viết một class tạo ra file XML theo chuẩn.
    cách 2: chuyển qua phát triển trên các môi trường có hỗ trợ XML.

    cách 1 thì đã có một "giang hồ" trên codeproject đã làm cho chúng ta.
    kiến trúc của class cũng khá đơn giản. nó chỉ đơn thuần là việc ghi file theo đúng chuẩn của XML và tạo ra một cấu trúc dữ liệu file XML.



    ở đây zkday để dễ dàng demo zkday xin dùng luôn phần trong bài tập của mình để nói và làm code ví dụ luôn.

    Mình sẽ tạo ra thêm 1 hàm là WriteXMLTag với code như sau:

    Visual C++ Code:
    1. /*
    2.  *  Ham ghi ra mot tag cua XML
    3.  */
    4.  
    5. void WriteXMLTag(CXMLElement *xmlElementParrent,//tag cha  của tag cần ghi
    6.                  CString sTagValue, // tên tag cần ghi
    7.                  CString sText) // text của tag vd: <sTagValue>sText</sTagValue>
    8. {
    9.     CXMLElement *xmlElementTag;
    10.     CXMLElement *xmlElementText;
    11.  
    12.     xmlElementText = new CXMLElement();
    13.     xmlElementTag = new CXMLElement();
    14.     xmlElementText->Create(sText.GetBuffer(1) ,XET_TEXT); // ghi kieu la TEXT
    15.     xmlElementTag->Create(sTagValue.GetBuffer(1),XET_TAG); // Ghi kieu la Tag
    16.  
    17.     xmlElementTag->AppendChild(xmlElementText);
    18.     xmlElementParrent->AppendChild(xmlElementTag);
    19. }


    đây là đoạn code sẽ convert dữ liệu từ file dbf phiên bản 3 sang file XML.

    Visual C++ Code:
    1. /*
    2.  *  Ham ghi cac truong cua du lieu xuong file XML
    3.  */
    4. BOOL SaveFileXML(CString sFileName, CDBFile *dbFile)
    5. {
    6.    
    7.     CXMLFile xmlFile;
    8.    
    9.     CXMLElement *xmlElement1, *xmlElementRoot;
    10.  
    11.     xmlElement1 = new CXMLElement;
    12.     xmlElementRoot = new CXMLElement;
    13.  
    14.     xmlFile.SetRoot(xmlElementRoot);    //tao tag root cho cua file XML
    15.     xmlElement1->Create("DataBaseFile",XET_TAG); // tag nay co ten la DatabaseFile
    16.     xmlElementRoot->AppendChild(xmlElement1); // set tag nay la tag con cua root
    17.    
    18.     //tao tag Header
    19.     CXMLElement *pXmlElementTag;   
    20.     pXmlElementTag = new CXMLElement();
    21.     pXmlElementTag->Create("Header",XET_TAG);  
    22.     xmlElement1->AppendChild(pXmlElementTag);//tag header la tag con cua tag DatabaseFile
    23.     //tao tag HeaderField
    24.     CXMLElement *pXmlElementField;
    25.     pXmlElementField = new CXMLElement;
    26.     pXmlElementField->Create("HeaderFields",XET_TAG);
    27.     xmlElement1->AppendChild(pXmlElementField);
    28.     //tao tag Record
    29.     CXMLElement *pXmlElementRecords;
    30.     pXmlElementRecords = new CXMLElement;
    31.     pXmlElementRecords->Create("Records",XET_TAG);
    32.     xmlElement1->AppendChild(pXmlElementRecords);
    33.  
    34.    
    35.  
    36.     /************************************************************************/
    37.     /* Phan ghi Header cua database file                                    */
    38.     /************************************************************************/
    39.     CString arrStrHeader[12];
    40.     dbFile->HeaderMainToString(arrStrHeader);
    41.     //ghi tag Head
    42.    
    43.  
    44.     //ghi cac tag la con cua tag head  
    45.     WriteXMLTag(pXmlElementTag,CString("Virsion"),arrStrHeader[0]);
    46.     WriteXMLTag(pXmlElementTag,CString("LastUpdate"),arrStrHeader[1]);
    47.     WriteXMLTag(pXmlElementTag,CString("NumberRecord"),arrStrHeader[2]);
    48.     WriteXMLTag(pXmlElementTag,CString("HeaderLength"),arrStrHeader[3]);
    49.     WriteXMLTag(pXmlElementTag,CString("RecordLength"),arrStrHeader[4]);   
    50.     WriteXMLTag(pXmlElementTag,CString("Reservode1"),arrStrHeader[5]);
    51.     WriteXMLTag(pXmlElementTag,CString("dBaseTranFlag"),arrStrHeader[6]);
    52.     WriteXMLTag(pXmlElementTag,CString("EnCryptFlag"),arrStrHeader[7]);
    53.     WriteXMLTag(pXmlElementTag,CString("dBaseMultiUser"),arrStrHeader[8]);
    54.     WriteXMLTag(pXmlElementTag,CString("Indexed"),arrStrHeader[9]);
    55.     WriteXMLTag(pXmlElementTag,CString("dbLangID"),arrStrHeader[10]);
    56.     WriteXMLTag(pXmlElementTag,CString("Reservide2"),arrStrHeader[11]);
    57.  
    58.  
    59.     /************************************************************************ /
    60.     /*  //phan ghi Fieldhead cua database                                   * /
    61.     / ************************************************************************/
    62.    
    63.     CArray<CString,CString&> arrField;
    64.     arrField.SetSize(1);
    65.     dbFile->FieldHeaderToString(arrField);
    66.     int nCountField = 1;
    67.  
    68.     for(int i=0; i<dbFile->GetnField(); i++)
    69.     {
    70.         CXMLElement *xmlElementFieldi;
    71.         xmlElementFieldi = new CXMLElement;
    72.         CString s;
    73.         s.Format("HeaderField",i+1);
    74.         xmlElementFieldi->Create(s.GetBuffer(1),XET_TAG);
    75.         pXmlElementField->AppendChild(xmlElementFieldi);
    76.         //ghi cac thuoc tinh cua no
    77.         WriteXMLTag(xmlElementFieldi,CString("FieldName"),arrField.GetAt(nCountField++));
    78.         WriteXMLTag(xmlElementFieldi,CString("FieldType"),arrField.GetAt(nCountField++));
    79.         WriteXMLTag(xmlElementFieldi,CString("FieldLength"),arrField.GetAt(nCountField++));
    80.     }
    81.  
    82.    
    83.     /************************************************************************/
    84.     /*  //phan ghi dataRecord cua database                                  */
    85.     /************************************************************************/
    86.  
    87.  
    88.     CArray<CString,CString&> sDataRecord;
    89.     sDataRecord.Copy(dbFile->sDataRecord);
    90.  
    91.     int nCount = 0,nRecord = dbFile->GetnRecord();
    92.     int iCount = 0;
    93.     while (nCount < nRecord)
    94.     {
    95.         //tao tag Record thu i     
    96.         CXMLElement *pXmlElementRecord;
    97.         pXmlElementRecord = new CXMLElement;
    98.         pXmlElementRecord->Create("Record",XET_TAG);
    99.         pXmlElementRecords->AppendChild(pXmlElementRecord);
    100.  
    101.         nCountField = 1;
    102.  
    103.         for(int i=0; i< dbFile->GetnField(); i++)
    104.         {
    105.             WriteXMLTag(pXmlElementRecord,arrField.GetAt(nCountField),sDataRecord.GetAt(iCount++));
    106.             nCountField+=3;
    107.         }
    108.         nCount ++;
    109.     }
    110.  
    111.  
    112.     xmlFile.SaveToFile(sFileName.GetBuffer(1)); // sau khi ghi xong chúng ta lưu file này lại.
    113.     return true;
    114. }

    đây là dữ liệu:
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		dulieu-dbf.jpg
Lần xem:	38
Size:		104.5 KB
ID:		4982

    đây là kết quả:(đọc file = IE6 cho nó chắc )
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		dulieu-xml.jpg
Lần xem:	34
Size:		46.9 KB
ID:		4983

    Ref Link Code:
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 18-09-2008 lúc 02:18 AM.

Các đề tài tương tự

  1. Trả lời: 3
    Bài viết cuối: 10-04-2013, 08:06 AM
  2. Giới thiệu cách chuyển File Ảnh thành file Video trong download proshow gold
    Gửi bởi thuhu0900x trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 3
    Bài viết cuối: 03-07-2012, 03:54 AM
  3. Đọc dữ liệu file midi dạng số HEX và lấy lời nhạc trong file ra file text
    Gửi bởi kimngockhtn_2007 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 29-06-2011, 04:40 PM
  4. File server để dùng ajax trong visual2010 là file gì, xử lý kết nối với SQLserver như thế nào?
    Gửi bởi lenamshenlong trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 9
    Bài viết cuối: 26-05-2011, 05:14 PM
  5. Làm sao để open file bằng cách double click vào file trong windows explorer?
    Gửi bởi Batchuoc_09 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 18-07-2010, 01:12 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn