2014/08/29

[ezXML] 簡單好用的XML Parsing C Library

XML格式檔案不管在寫程式或者網路上傳輸參數設定,都很常使用。這邊介紹一個簡單的XML Parser,可以用來取出每個參數的值,提供程式做參數設定使用。網站請參考,這次使用的版本是ezxml-0.8.6.tar.gz



首先使用test來測試
make test


text.xml範例XML檔案
test.xml
<?xml version="1.0"?>
<formula1>
    <team name="McLaren">
        <driver>
            <name>Kimi Raikkonen</name>
            <points>CCCC</points>
        </driver>
        <driver>
            <name>Juan Pablo Montoya</name>
            <points>60</points>
        </driver>
    </team>
</formula1>

cat test.xml


使用ezxmltest執行檔來解析text.xml檔案
./ezxmltest test.xml


就可以看到整個xml檔案的內容。

接下來使用ezXML的Library來parsing XML file,把是哪個team name、什麼name及points印出來,程式碼請參考
ezxml_mycode.c
#include <stdio.h>
#include <stdlib.h>
#include "ezxml.h"

int main()
{
    ezxml_t f1 = ezxml_parse_file("test.xml"), team, driver;
    const char *teamname;

    for (team = ezxml_child(f1, "team"); team; team = team->next) {
        teamname = ezxml_attr(team, "name");
        for (driver = ezxml_child(team, "driver"); driver; driver = driver->next) {
            printf("%s, %s: %s\n", ezxml_child(driver, "name")->txt, teamname,
            ezxml_child(driver, "points")->txt);
        }
    }
    ezxml_free(f1);
    return 0;
}

編譯
make
編譯出libezxml.a的static library檔案。

接著編譯剛剛寫好的ezxml_mycode.c
gcc ezxml_mycode.c libezxml.a -o ezxml_mycode -I.

最後輸入剛剛的範例text.xml
./ezxml_mycode


就可以成功地看到把XML檔案解析完的結果!

沒有留言:

張貼留言