今天本來打算把那幾個菜單項的功能完成的,不過后來又轉(zhuǎn)去做其他事情了,計劃執(zhí)行力不強啊,唉!
要在Lua中操作xml,在現(xiàn)在的軟件開發(fā)中,這是個很常見的需求,xml已經(jīng)變得無處不在了。在神作PIL中提到的是用expat庫,呃,我只會用 DOM,所以只好找其他的庫了。前些天在luaforge上看到一個叫l(wèi)txml的,才0.2版本之后就沒更新過了,用的是TinyXPath和 TinyXML,我決定好好考察一下。
它沒有文檔,只有一個readme后面四五行C代碼示例,不過這足夠了,看一下那個cpp文件中注冊的方法,基本可以猜出用法。總的說來,先 require,再用xml.open方法打開xml文件,然后就可以用TiXMLDocument的select等方法得到TiXMLNode,就跟我熟悉的用C++操作DOM的做法一樣了。
說起來TinyXML的表現(xiàn)不差,基本能滿足我當前的需要,我有點兒后悔當年花了那么大力氣將Xerces C用VC2008編譯了一遍,又絞盡腦汁用MinGW編譯了一遍,還自己封裝了一把,以適應STL中的算法。對于我來說,它太龐大了,讓我畏懼,那么大一個卻仍然要讓Xalan來處理XSLT和XPath。同樣,libxml和libxslt給我的印象也差不多,它們甚至沒能讓我順利編譯!
昨天說到的,現(xiàn)在程序崩潰總是無聲無息地自動退出了。今天想了想,其實之前好像也想到過,會不會是因為LuaJIT的緣故,于是換了官方的Lua的 dll來用,果然在原本會引起退出的地方,Lua只是而壓了條錯誤信息到棧中,LuaJIT的行為沒跟Lua一致??!在Lua list上發(fā)了個郵件問問,結(jié)果一個老表說他沒能重現(xiàn),問我有沒有證據(jù),我汗,用Wink錄了個8MB的操作錄像,然后發(fā)現(xiàn)這maillist限制最大附件是40KB,嚴重超標,還要等人審查。總結(jié)一下崩潰的條件,在Lua代碼中調(diào)用第三方C/C++代碼注冊的類和方法,如果方法、成員不存在,就會退出。而Lua是能處理成將其識別為一個nil,然后報不能在nil上進行函數(shù)調(diào)用之類的話。
總之,一切在向好的方向發(fā)展,甚至自己已經(jīng)能漸漸地習慣于寫Lua代碼了,不像之前那樣非C/C++不爽!
如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答!! 點擊進入論壇