本文目錄一覽:
c語言如何解析xml並將所有內容存入數組
/* 前段時間恰好做過類似的東西,代碼可以給你參考下。
* Xml配置見最後
*/
typedef struct SrcFileFmt
{
int ColID;
char ColCode[64]; /* 欄位英文名稱 */
char ColName[128]; /* 欄位中文名稱*/
char ColType[20]; /* 欄位類型(包含長度) */
char ColComment[128]; /* 欄位描述 */
}SrcFileFmt;
int main(int argc, char **argv)
{
SrcFileFmt SrcFileFmt[128];
int iNum = -1;
if ( 2 argc )
{
printf(“Usage: %s SrcXmlFile\n”, argv[0]);
return -1;
}
iNum = parseSourceCfg(SrcCfgFile, SrcFileFmt);
if (iNum == -1)
{
return -1;
}
return 0;
}
/* 調用此函數後,xml文件的內容會被存儲到結構體數組SrcFileFmt srcfilefmt[]中
* 此函數依賴於libxml2-2.9.2.tar.xz
*/
int parseSourceCfg(char *FileName, SrcFileFmt srcfilefmt[])
{ /* 解析源文件xml,FileName 為源xml文件名 */
xmlDocPtr doc;
xmlNodePtr cur, root;
char sFileName[64] = {‘\0’};
int cnt = 0;
if (FileName == NULL)
{
return -1;
}
sprintf(sFileName, “%s.xml”, FileName);
doc = xmlParseFile(sFileName);
if (doc == NULL)
{
return -1;
}
root = xmlDocGetRootElement(doc);
if (root == NULL) {
xmlFreeDoc(doc);
return(-1);
}
if (xmlStrcmp(root-name, (const xmlChar *) “SrcRoot”))
{
xmlFreeDoc(doc);
return -1;
}
cur = root-xmlChildrenNode;
while (cur != NULL)
{
if ((!xmlStrcmp(cur-name, (const xmlChar *)”Column”)))
{
xmlChar *key;
xmlNodePtr cur_sub = cur;
cur_sub = cur_sub-xmlChildrenNode;
while (cur_sub != NULL)
{
if ((!xmlStrcmp(cur_sub-name, (const xmlChar *)”ColID”))) {
key = xmlNodeListGetString(doc, cur_sub-xmlChildrenNode, 1);
killblank((char*)key);
srcfilefmt[cnt].ColID = atoi((char*)key);
xmlFree(key);
}
if ((!xmlStrcmp(cur_sub-name, (const xmlChar *)”ColCode”))) {
key = xmlNodeListGetString(doc, cur_sub-xmlChildrenNode, 1);
killblank((char*)key);
strcpy(srcfilefmt[cnt].ColCode, (char*)key);
xmlFree(key);
}
else if ((!xmlStrcmp(cur_sub-name, (const xmlChar *)”ColName”))) {
key = xmlNodeListGetString(doc, cur_sub-xmlChildrenNode, 1);
killblank((char*)key);
strcpy(srcfilefmt[cnt].ColName, (char*)key);
xmlFree(key);
}
else if ((!xmlStrcmp(cur_sub-name, (const xmlChar *)”ColType”))) {
key = xmlNodeListGetString(doc, cur_sub-xmlChildrenNode, 1);
killblank((char*)key);
strcpy(srcfilefmt[cnt].ColType, (char*)key);
xmlFree(key);
}
else if ((!xmlStrcmp(cur_sub-name, (const xmlChar *)”ColComment”))) {
key = xmlNodeListGetString(doc, cur_sub-xmlChildrenNode, 1);
killblank((char*)key);
strcpy(srcfilefmt[cnt].ColComment, (char*)key);
xmlFree(key);
}
cur_sub = cur_sub-next;
}
cnt++;
}
cur = cur-next;
}
xmlFreeDoc(doc);
return cnt;
}
SrcRoot
Column
ColID1/ColID
ColCodekmh/ColCode
ColName欄位1/ColName
ColTypeVARCHAR(11)/ColType
/Column
Column
ColID2/ColID
ColCodedfkmh/ColCode
ColName欄位2/ColName
ColTypeVARCHAR(11)/ColType
/Column
Column
ColID3/ColID
ColCodehbh/ColCode
ColName欄位3/ColName
ColTypeINTEGER(10)/ColType
/Column
/SrcRoot
C語言 格式符解析
printf(“a=%4d,b=%6.2f,c=%c,d=%s”,12,3.456,『A’,「hello”);
%4d
對應後面第一個數值12,以整型佔4個字元列印輸出,
%6.2f
以實型列印輸出,格式輸出為佔6個字元,列印小數點後兩位。。四捨五入為3.46,
把3.456改為3.454,看看
%c列印字元型
%s字元串型
跪求:如何正確地選用數據類型?(C語言)
char是固定長度字元類型,varchar是可變長度的字元類型,在檢索時char列會刪除尾部的空格,MyISAM存儲引擎建議使用固定長度的數據列替代可變長度的數據列,MEMORY存儲引擎目前都使用固定長度的數據行存儲。InnoDB存儲引擎建議使用varchar。
保存較大文本時通常會使用text或者blob。二者的差別是blob能用來保存二進位數據比如照片,而text只能保存字元數據。text和blob值會引起一些性能問題,特別是在執行了大量的刪除操作時。可以使用合成的索引來提高大文本欄位(BLOB 或TEXT)的查詢性能。
擴展資料:
注意事項:
在MySQL中支持的5個主要整數類型是TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT。這些類型在很大程度上是相同的,只有存儲的值的大小是不相同的。
使用一個寬度指示器不會影響欄位的大小和可以存儲的值的範圍。萬一需要對一個欄位存儲一個超出許可範圍的數字,MySQL會根據允許範圍最接近的一端截短後再進行存儲。還有一個比較特別的地方是MySQL會在不合規定的值插入表前自動修改為0。
參考資料來源:百度百科-數據類型
原創文章,作者:JHTS,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/147183.html