STEP1 : 在這個網址: http://xmlsoft.org/sources/win32/
下載這幾個包:
iconv-1.9.2.win32.zip
libxml2-2.7.3.win32.zip
libxslt-1.1.24.win32.zip
將lib,dll,include檔案分別拷貝到合適的位置。
STEP2:
編寫測試代碼:
XML Schema:
<br />#include "libxml/tree.h"<br />#include "libxml/parser.h"<br />#include "libxml/xmlschemas.h"</p><p>/****************************************************<br /> @describle 應用XML Schema模板檔案驗證案例文檔<br /> @paramschema_filename 模式檔案<br /> @paramxmldoc XML格式的案例文檔<br /> @retval >=0 驗證成功<br /> < 0 驗證失敗<br />****************************************************/<br />int is_valid(const char *schema_filename, const char *xmldoc) {<br />xmlDocPtr doc;<br />doc = xmlReadFile(xmldoc, NULL, XML_PARSE_NONET|XML_PARSE_NOENT);<br />if ( NULL == doc) {<br />MessageBox(NULL,"讀取XML文檔錯誤",NULL,NULL);<br />return -1;<br />}<br />xmlDocPtr schema_doc = xmlReadFile(schema_filename, NULL, XML_PARSE_NONET|XML_PARSE_NOENT);<br />if ( NULL == schema_doc) {<br />MessageBox(NULL,"讀取Schema錯誤",NULL,NULL);<br />return -1;<br />}<br />xmlSchemaParserCtxtPtr parser_ctxt = xmlSchemaNewDocParserCtxt(schema_doc);<br />if (NULL == parser_ctxt) {<br />return -1;<br />}<br />xmlSchemaPtr schema = xmlSchemaParse(parser_ctxt);<br />if (schema == NULL) {<br />return -1;<br />}<br />xmlSchemaValidCtxtPtr valid_ctxt = xmlSchemaNewValidCtxt(schema);<br />if (NULL == valid_ctxt) {<br />return -1;<br />}<br />int is_valid = (xmlSchemaValidateDoc(valid_ctxt,doc) == 0);</p><p>xmlSchemaFreeValidCtxt(valid_ctxt);<br />xmlSchemaFree(schema);<br />xmlSchemaFreeParserCtxt(parser_ctxt);<br />xmlFreeDoc(schema_doc);</p><p>return is_valid;<br />}
XSLT:
<br />#include "libxslt/xslt.h"<br />#include "libxslt/xsltInternals.h"<br />#include "libxslt/transform.h"<br />#include "libxslt/xsltutils.h"<br />/****************************************************<br /> @describle 應用XSLT模板轉換案例格式<br /> @paramstylesheet XSLT模板檔案<br /> @paramolddoc 待轉換案例檔案<br /> @paramnewdoc 轉換後的案例檔案<br /> @retval >=0 轉換成功<br /> < 0 轉換失敗<br />****************************************************/<br />int xslt(const char *stylesheet, const char *olddoc, const char *newdoc) {<br />const char *params[16+1];<br />int ret;<br />xsltStylesheetPtr cur = NULL;<br />xmlDocPtr doc, res;<br />FILE *outfp;<br />/*設定參數*/<br />params[0] = NULL;<br />/*設定libxml*/<br />xmlSubstituteEntitiesDefault(1);<br />xmlLoadExtDtdDefaultValue = 1;<br />cur = xsltParseStylesheetFile((const xmlChar *)stylesheet);<br />if ( NULL == cur ) {<br />MessageBox(NULL,"分析XSLT模板檔案出錯",NULL,NULL);<br />return -1;<br />}<br />doc = xmlParseFile(olddoc);<br />res = xsltApplyStylesheet(cur, doc, (const char **)params);<br />if ( NULL == res ) {<br />MessageBox(NULL,"應用模板出錯",NULL,NULL);<br />return -1;<br />}<br />if (NULL == res->children) {<br />MessageBox(NULL,"res->children為NULL",NULL,NULL);<br />return -1;<br />}<br />ret = xsltSaveResultToFilename(newdoc,res,cur,0);<br />xsltFreeStylesheet(cur);<br />xmlFreeDoc(res);<br />xmlFreeDoc(doc);<br />xsltCleanupGlobals();<br />xmlCleanupParser();<br />return ret;<br />}