版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、Ubuntu 10.04 安裝配置指南作者: HYPERLINK http:/jandy.me/ o Jandy Jandy版本:1004.1.0504目錄、 HYPERLINK /View?id=dgthtrjr_345hq4t4dgk l prepare t _self o 準備 準備一、 HYPERLINK /View?id=dgthtrjr_345hq4t4dgk l install t _self o 安裝 安裝二、 HYPERLINK /View?id=dgthtrjr_345hq4t4dgk l setting t _self o 配置 配置三、 HYPERLINK /View?
2、id=dgthtrjr_345hq4t4dgk l pinyin t _self o 輸入法 輸入法四、 HYPERLINK /View?id=dgthtrjr_345hq4t4dgk l flash t _self o Flash Flash五、 HYPERLINK /View?id=dgthtrjr_345hq4t4dgk l others t _self o 附錄 附錄六、 HYPERLINK /View?id=dgthtrjr_345hq4t4dgk l update t _self o 更新 更新、準備1、下載Ubuntu光盤鏡像文件: HYPERLINK /123/?p=79 o
3、/123/?p=79 /123/?p=792、校驗Ubuntu光盤鏡像文件的MD5: HYPERLINK /123/?p=85 o /123/?p=85 /123/?p=853、備份數(shù)據(jù): HYPERLINK /123/?p=92 o /123/?p=92 /123/?p=924、用U盤制作Live USB: HYPERLINK /123/?p=18 o /123/?p=18 /123/?p=18或者把.iso文件刻錄到光盤: HYPERLINK /123/?p=56 o /123/?p=56 /123/?p=565、規(guī)劃分區(qū)1)雙系統(tǒng):如果你的電腦里已經(jīng)裝有一個Windows系統(tǒng),而且硬盤有
4、兩個以上的分區(qū)的話。你需要把其中一個10GB以上的分區(qū)刪除掉(最好是刪除最后一個分區(qū)),以空出一部分未分區(qū)的硬盤空間用來安裝Ubuntu。這樣安裝Ubuntu后,系統(tǒng)會自動建立一個啟動菜單,讓你在開機時選擇啟動Windows還是Ubuntu。在Windows里刪除分區(qū)的方法是:a)把要刪除的分區(qū)中的所有文件移到別的分區(qū)。b)右鍵單擊“我的電腦”,選擇“管理磁盤管理”。或“控制面板管理工具雙擊計算機管理存儲磁盤管理”。c)右鍵單擊要刪除的分區(qū),選擇“刪除邏輯驅動器”。雙系統(tǒng)的分區(qū)大小:swap交換空間:物理內(nèi)存小于或等于2GB,交換空間為物理內(nèi)存大小的2倍;物理內(nèi)存大于2GB的,交換空間等于物理
5、內(nèi)存大小。/ 分區(qū):空閑空間總容量-交換空間。2)單系統(tǒng):如果你決定在電腦里只安裝Ubuntu一個操作系統(tǒng)的話,建議你分3個區(qū):/ 分區(qū):8-30G(一般15G就夠了);swap交換空間:物理內(nèi)存小于或等于2GB,交換空間為物理內(nèi)存大小的2倍;物理內(nèi)存大于2GB的,交換空間等于物理內(nèi)存大??;/home:所有剩余空間。6、網(wǎng)絡連接。在Ubuntu里撥號上網(wǎng)比較麻煩,如果你是用ADSL寬帶上網(wǎng),又沒有路由器的話,建議你花一百多塊錢買個無線路由器,然后在路由器里設置自動撥號,路由器的使用手冊里有設置自動撥號的詳細說明。如果你是通過其他方式來連接網(wǎng)絡的話,請自行Google連接方法(可參考: HYPE
6、RLINK /index.php?title=UbuntuHelp:InternetHowto/zh&variant=zh-cn o /index.php?title=UbuntuHelp:InternetHowto/zh&variant=zh-cn /index.php?title=UbuntuHelp:InternetHowto/zh&variant=zh-cn)。如果你的網(wǎng)速比較慢,或沒有網(wǎng)絡的話,建議使用Linux Deepin等中文定制版來安裝,否則安裝后會沒有中文輸入法,也不能播放常見的影音文件。一、安裝1、Ubuntu 10.04的CD鏡像里依然沒有包含完整的中文語言包和輸入法,
7、如果在聯(lián)網(wǎng)狀態(tài)下安裝的話,安裝程序會自動下載語言支持文件,而且2M的ADSL網(wǎng)速下只要幾分鐘即可下載完畢,所以建議在聯(lián)網(wǎng)狀態(tài)下進行安裝。在安裝前先打開ADSL的Model和路由器,然后用光盤或Live USB啟動電腦。技巧:開機時猛按F12、F9等功能鍵可以選擇啟動設備,具體是哪個鍵請翻閱電腦說明書,或開機時注意看屏幕下面的提示。把左邊的滾動條拉到底,選擇“中文(簡體)”,點擊“試用Ubuntu 10.04 LTS”。如果你是用Live USB啟動的話,就不會有上面的畫面,在啟動菜單選擇“Default”直接進入桌面。如果你是用網(wǎng)線聯(lián)網(wǎng)的話,應該已經(jīng)自動聯(lián)好網(wǎng)絡,打開Firefox就直接就可以
8、上網(wǎng)了。如果你是用無線網(wǎng)卡的話,請點擊小喇叭左邊的網(wǎng)絡管理器圖標,圖標有個紅色的嘆號表示尚未聯(lián)網(wǎng)。選擇一個可用的無線網(wǎng)絡。按提示輸入無線網(wǎng)絡的密碼后,很快就可聯(lián)上網(wǎng)絡,這時網(wǎng)絡管理器的圖標就沒有紅色的嘆號了。然后雙擊桌面的“安裝 Ubuntu 10.04 LTS”圖標進行安裝。語言選擇:中文(簡體)。如果你喜歡用其他語言的話,就自己看著辦吧。地區(qū)選擇:默認是“中國(重慶)”,不知為什么。我在上海,所以就選“中國(上海)”。鍵盤布局:就用系統(tǒng)建議的“USA”吧。準備硬盤空間:選“手動指定分區(qū)(高級)”。如果是在一塊全新的硬盤上安裝的話,要先“新建分區(qū)表”。已經(jīng)進行過分區(qū)的硬盤則可以跳過這步。新建
9、分區(qū)表會擦除硬盤上的所有數(shù)據(jù)!如果你的硬盤不是全新的硬盤的話,就不用新建分區(qū)表了,直接選擇“空閑”的空間,再點“添加”按鈕。先創(chuàng)建 / 分區(qū):“新分區(qū)的類型”選擇“主分區(qū)”;“新分區(qū)的位置”保留默認的“起始”;“用于”“Ext4 日志文件系統(tǒng)”;“掛載點”選擇“/”。再選擇“空閑”空間,點擊“添加”按鈕。接著創(chuàng)建swap交換空間:“新分區(qū)的類型”選“邏輯分區(qū)”;“新分區(qū)的位置”保留默認的“起始”;“用于”“交換空間”;“掛載點”不用選。如果是雙系統(tǒng)的話,分一個 / 加 一個交換空間 就可以了。單系統(tǒng)還可以再分一個 /home,掛載點選“/home”就行了,用“Ext4 日志文件系統(tǒng)”??梢詤⒖?/p>
10、9.10版的安裝指南: HYPERLINK /fileview?id=0B7vaQCSPJU8PNjUzZmU1ZTItYTVlNi00ZDBmLWFhMzMtN2Q3NDA4MzljMjRm&hl=zh_CN o /fileview?id=0B7vaQCSPJU8PNjUzZmU1ZTItYTVlNi00ZDBmLWFhMzMtN2Q3NDA4MzljMjRm&hl=zh_CN /fileview?id=0B7vaQCSPJU8PNjUzZmU1ZTItYTVlNi00ZDBmLWFhMzMtN2Q3NDA4MzljMjRm&hl=zh_CN填寫個人資料:“您的名字”可以使用除冒號(:)和逗
11、號(,)以外的任意字符,中間可以有空格。安裝后還可以再修改?!暗卿浢笔情_機登錄時要輸入的用戶名,安裝后不能再修改。只可以使用英文字母、數(shù)字、減號(-)和下劃線(_),中間不可以有空格,第一個字符必須是英文字母。注意區(qū)分字母的大小寫,建議全用小寫字母。密碼最少要8位,而且不要全是數(shù)字或字母,要字母和數(shù)字混合。拿出紙和筆,記下你設置的登錄名和密碼!注意分清登錄名和密碼使用的字母的大小寫。以免忘記。如果你對“登錄時需要密碼并且加密我的主目錄”這個選項不熟悉的話,建議不要選擇它,以免加密后連自己都無法訪問自己的主目錄。填寫完畢,點“前進”按鈕。檢查一下,沒問題的話就點擊“安裝”按鈕開始安裝。安裝需要
12、10-15分鐘時間,如果屏幕變黑,那可能是因為鍵盤和鼠標長時間沒動作而啟動的屏幕保護,動動鼠標就恢復了,不要緊張,更不要強行關機。Retrieving file 時,如果很慢的話,可以點“跳過”按鈕。下載語言包如果很慢的話,也可以先跳過,等安裝完成后再換源下載。安裝完畢,重啟電腦。這行英文的意思是:請取出光盤(Live USB),關上光驅托盤,按回車鍵(Enter)。如果你是聯(lián)網(wǎng)安裝的話,安裝完畢應該就是中文界面了。如果你是斷網(wǎng)安裝,或者在下載語言包時選擇了跳過,重啟后會提示你“不完整的語言支持”,這時先不要運行,點擊“Close”按鈕關閉提示。二、配置如果你剛裝好的Ubuntu沒有中文界面、
13、沒有中文輸入法、不能播放常見的影音文件請先不要埋怨,這是因為Ubuntu的公司目前的人力財力有限,暫時還不能為每個國家地區(qū)發(fā)行一個獨立的版本,我們可以自己進行配置。 HYPERLINK /ailurus/?page_id=104 o Ailurus Ailurus這個小程序可以幫助我們更簡便地完成對Ubuntu的配置。先下載Ailurus的安裝包,下載地址: HYPERLINK /ailurus/ppa/ubuntu/pool/main/a/ailurus/ o /ailurus/ppa/ubuntu/pool/main/a/ailurus/ /ailurus/ppa/ubuntu/pool/
14、main/a/ailurus/我們需要下載擴展名為“.deb”的文件,注意選對版本,比如Ubuntu 10.04的代號是Lucid,就下載“ailurus_10.04.2-0lucid1_all.deb”。下載完畢,雙擊deb文件,點擊“Install Package”按鈕開始安裝。輸入密碼。安裝完畢,點擊“Close”按鈕關閉窗口。在系統(tǒng)工具菜單里打開Ailurus。點擊“快速安裝熱門軟件”按鈕。選擇要配置的項目,但這里安裝的瀏覽器Flash插件不是Adobe的官方插件,安裝后也不能播放Google音樂和亦歌,瀏覽網(wǎng)頁時仍會提示“您需要其他插件以顯示此頁面的所有媒體”。你可以選擇不安裝這里的
15、“瀏覽器的Flash插件”,稍后再手動安裝官方的Flash插件。選好后,點“OK”按鈕。輸入密碼。開始下載所需的軟件包。期間可能還會再要輸入一到兩次密碼,請留意提示。配置完畢,如果你電腦的顯卡是集成顯卡的話,一般會提示“這個系統(tǒng)上沒有使用專有驅動”,這表示Ubuntu系統(tǒng)已經(jīng)自帶顯卡驅動了,不需要額外安裝驅動。點擊“關閉”按鈕即可。再關閉Ailurus的速配窗口。你還可以用Ailurus來進行其他一些實用的設置,如:1)如果你不喜歡在桌面“顯示已經(jīng)掛載的卷的圖標”的話,可以在“系統(tǒng)設置桌面”里取消顯示。2)如果你不習慣“最小化”、“最大化”、“關閉”等按鈕放在窗口標題欄左邊的話,可以在“系統(tǒng)設
16、置窗口效果”里把“窗口標題欄的按鈕的布局”設置回“GNOME經(jīng)典”。3)如果你不喜歡“當屏幕保護程序激活時鎖定屏幕”的話,可以在“系統(tǒng)設置GNOME會話”中取消。4)“安裝軟件Nautilus右鍵菜單”,添加“以管理員身份打開”項。(稍后我們要用到這個功能。)配置完畢,點擊右上角的關閉按鈕,選擇“Log Out”(注銷)或“Restart”(重新啟動)。三、輸入法重啟電腦后,界面就變成中文的了。但還沒有拼音輸入法,還需要再設置一下。如果你是聯(lián)網(wǎng)安裝在安裝過程中自動下載語言包的話,可能不需要這一步,安裝完畢直接就有拼音輸入法了。左鍵點擊鍵盤模樣的輸入法圖標,選擇“首選項”。點擊“輸入法選擇輸入法
17、”。選擇“漢語Pinyin”。點擊“添加”按鈕。選擇“漢語 - Pinyin”,點擊“向上”按鈕,把“漢語 - Pinyin”移動到最上面。關閉IBus首選項窗口。然后就可以選擇Pinyin輸入法輸入漢字了。IBus的候選詞排列方向默認是豎直的,你可以在首選項里設置為水平排列。Pinyin輸入法的候選詞每排只有5個候選詞,你可以點擊輸入法狀態(tài)條的“i”按鈕,把“Number of candidates”拖到9個。四、Flash1)為Firefox瀏覽器安裝Adobe Flash PlayerFirefox默認沒有安裝Flash Player的插件,打開有Flash的網(wǎng)頁時會彈出提示:“您需要其
18、他插件以顯示此頁面的所有媒體”,點擊“安裝缺失插件”進行安裝時,會安裝失敗,需要手動安裝,方法如下:打開網(wǎng)頁 HYPERLINK /flashplayer/ o /flashplayer/ /flashplayer/,點擊“Select version to download.”,選擇“.deb for Ubuntu 8.04+”,然后點“Agree and Install now”按鈕,下載.deb包并保存到桌面或其他文件夾,下載完成后,先關閉所有瀏覽器窗口,再雙擊.deb文件進行安裝。安裝完畢,關閉瀏覽器重新打開,就可以顯示Flash了。2)Flash中文字體顯示為方塊的解決辦法某些軟件或
19、網(wǎng)站(如谷歌音樂)的中文字體會顯示為方塊,進行如下設置即可解決:點擊屏幕左上角的菜單“位置主文件夾”,點擊左邊的“文件系統(tǒng)”,用鼠標右鍵點擊文件夾“etc”選擇“以管理員身份打開”,然后再打開文件夾“/fonts/conf.d/”,右鍵單擊文件 49-sansserif.conf 并選擇“打開方式Gedit”,把倒數(shù)第4行的“sans-serif”改為“sans serif”,保存后關閉文件,重新打開網(wǎng)站,就可以正常顯示了。五、附錄Ubuntu常用軟件 HYPERLINK /123/?p=80 o /123/?p=80 /123/?p=80Ubuntu/Windows常用軟件/應用程序對照表
20、HYPERLINK /123/?p=89 o /123/?p=89 /123/?p=89六、更新附錄資料:不需要的可以自行刪除 libxml2應用實例Libxml2 是一個xml的c語言版的解析器,本來是為Gnome項目開發(fā)的工具,是一個基于MIT License的免費開源軟件。它除了支持c語言版以外,還支持c+、PHP、Pascal、Ruby、Tcl等語言的綁定,能在Windows、Linux、Solaris、MacOsX等平臺上運行。功能還是相當強大的,相信滿足一般用戶需求沒有任何問題。二、 Libxml2安裝:一般如果在安裝系統(tǒng)的時候選中了所有開發(fā)庫和開發(fā)工具的話(Fedora Core
21、系列下),應該不用安裝,下面介紹一下手動安裝: 1) 從xmlsoft站點或ftp()站點下載libxml壓縮包(libxml2-xxxx.tar.gz)2) 對壓縮包進行解壓縮 tar xvzf libxml2-xxxx.tar.gz3) 進入解壓縮后的文件夾中運行 ./configure -prefix /home/user/myxml/xmlinst(此處為待安裝的路徑)或者直接使用 ./configure make make install 4) 添加路徑 export PATH=/home/user/myxml/xmlinst/bin:$PATH 說明:為了結構清晰,最好將libxm
22、l2不安裝在解壓目錄中。安裝完成后就可以使用簡單的代碼解析XML文件,包括本地和遠程的文件,但是在編碼上有一些問題。Libxml默認只支持UTF8的編碼,無論輸入輸出都是UTF-8,所以如果你解析完一個XML得到的結果都是UTF8的,如果需要輸出GB2312或者其它編碼,需要ICONV來做轉碼(生成UTF8編碼的文件也可以用它做),如果系統(tǒng)中沒有安裝iconv的話,需要安裝libiconv。 1) 下載libiconv壓縮包(例如libiconv-1.11.tar.gz) 2) 對壓縮包進行解壓縮tar xvzf libiconv-1.11.tar.gz 3) 進入解壓縮后的文件夾中運行 ./
23、configure make make install三、關于XML:在開始研究 Libxml2 庫之前,先了解一下XML的相關基礎。XML 是一種基于文本的格式,它可用來創(chuàng)建能夠通過各種語言和平臺訪問的結構化數(shù)據(jù)。它包括一系列類似 HTML 的標記,并以樹型結構來對這些標記進行排列。例如,可參見清單 1 中介紹的簡單文檔。為了更清楚地顯示 XML 的一般概念,下面是一個簡化的XML文件。清單 1. 一個簡單的 XML 文件 root delete 10清單 1 中的第一行是 XML 聲明,它告訴負責處理 XML 的應用程序,即解析器,將要處理的 XML 的版本。大部分的文件使用版本 1.0
24、編寫,但也有少量的版本 1.1 的文件。它還定義了所使用的編碼。大部分文件使用 UTF-8,但是,XML 設計用來集成各種語言中的數(shù)據(jù),包括那些不使用英語字母的語言。接下來出現(xiàn)的是元素。一個元素以開始標記 開始(如 ),并以結束標記 結束(如 ),其中使用斜線 (/) 來區(qū)別于開始標記。元素是 Node 的一種類型。XML 文檔對象模型 (DOM) 定義了幾種不同的 Nodes 類型,包括:Elements(如 files 或者 age)Attributes(如 units)Text(如 root 或者 10)元素可以具有子節(jié)點。例如,age 元素有一個子元素,即文本節(jié)點 10。XML 解析器
25、可以利用這種父子結構來遍歷文檔,甚至修改文檔的結構或內(nèi)容。LibXML2 是這樣的解析器中的其中一種,并且文中的示例應用程序正是使用這種結構來實現(xiàn)該目的。對于各種不同的環(huán)境,有許多不同的解析器和庫。LibXML2 是用于 UNIX 環(huán)境的解析器和庫中最好的一種,并且經(jīng)過擴展,它提供了對幾種腳本語言的支持,如 Perl 和 Python。四、Libxml2中的數(shù)據(jù)類型和函數(shù)一個函數(shù)庫中可能有幾百種數(shù)據(jù)類型以及幾千個函數(shù),但是記住大師的話,90%的功能都是由30%的內(nèi)容提供的。對于libxml2,我認為搞懂以下的數(shù)據(jù)類型和函數(shù)就足夠了。1)內(nèi)部字符類型xmlCharxmlChar是Libxml2中
26、的字符類型,庫中所有字符、字符串都是基于這個數(shù)據(jù)類型。事實上它的定義是:xmlstring.htypedef unsigned char xmlChar;使用unsigned char作為內(nèi)部字符格式是考慮到它能很好適應UTF-8編碼,而UTF-8編碼正是libxml2的內(nèi)部編碼,其它格式的編碼要轉換為這個編碼才能在libxml2中使用。還經(jīng)??梢钥吹绞褂脁mlChar*作為字符串類型,很多函數(shù)會返回一個動態(tài)分配內(nèi)存的xmlChar*變量,使用這樣的函數(shù)時記得要手動刪除內(nèi)存。2) xmlChar相關函數(shù)如同標準c中的char類型一樣,xmlChar也有動態(tài)內(nèi)存分配、字符串操作等相關函數(shù)。例如x
27、mlMalloc是動態(tài)分配內(nèi)存的函數(shù);xmlFree是配套的釋放內(nèi)存函數(shù);xmlStrcmp是字符串比較函數(shù)等等?;旧蟲mlChar字符串相關函數(shù)都在xmlstring.h中定義;而動態(tài)內(nèi)存分配函數(shù)在xmlmemory.h中定義。3)xmlChar*與其它類型之間的轉換另外要注意,因為總是要在xmlChar*和char*之間進行類型轉換,所以定義了一個宏BAD_CAST,其定義如下:xmlstring.h#define BAD_CAST (xmlChar *)原則上來說,unsigned char和char之間進行強制類型轉換是沒有問題的。4)文檔類型xmlDoc、指針xmlDocPtrxm
28、lDoc是一個struct,保存了一個xml的相關信息,例如文件名、文檔類型、子節(jié)點等等;xmlDocPtr等于xmlDoc*,它搞成這個樣子總讓人以為是智能指針,其實不是,要手動刪除的。xmlNewDoc函數(shù)創(chuàng)建一個新的文檔指針。xmlParseFile函數(shù)以默認方式讀入一個UTF-8格式的文檔,并返回文檔指針。xmlReadFile函數(shù)讀入一個帶有某種編碼的xml文檔,并返回文檔指針;細節(jié)見libxml2參考手冊。xmlFreeDoc釋放文檔指針。特別注意,當你調(diào)用xmlFreeDoc時,該文檔所有包含的節(jié)點內(nèi)存都被釋放,所以一般來說不需要手動調(diào)用xmlFreeNode或者xmlFreeN
29、odeList來釋放動態(tài)分配的節(jié)點內(nèi)存,除非你把該節(jié)點從文檔中移除了。一般來說,一個文檔中所有節(jié)點都應該動態(tài)分配,然后加入文檔,最后調(diào)用xmlFreeDoc一次釋放所有節(jié)點申請的動態(tài)內(nèi)存,這也是為什么我們很少看見xmlNodeFree的原因。xmlSaveFile將文檔以默認方式存入一個文件。xmlSaveFormatFileEnc可將文檔以某種編碼/格式存入一個文件中。5)節(jié)點類型xmlNode、指針xmlNodePtr節(jié)點應該是xml中最重要的元素了,xmlNode代表了xml文檔中的一個節(jié)點,實現(xiàn)為一個struct,內(nèi)容很豐富:tree.htypedef struct _xmlNode
30、xmlNode;typedef xmlNode *xmlNodePtr;struct _xmlNode void *_private;/* application data */ xmlElementType type; /* type number, must be second ! */ const xmlChar *name; /* the name of the node, or the entity */ struct _xmlNode *children;/* parent-childs link */ struct _xmlNode *last; /* last child li
31、nk */ struct _xmlNode *parent;/* child-parent link */ struct _xmlNode *next; /* next sibling link*/ struct _xmlNode *prev; /* previous sibling link*/ struct _xmlDoc*doc;/* the containing document */ /* End of common part */ xmlNs *ns; /* pointer to the associated namespace */ xmlChar *content; /* th
32、e content */ struct _xmlAttr *properties;/* properties list */ xmlNs *nsDef; /* namespace definitions on this node */ void *psvi;/* for type/PSVI informations */ unsigned short line; /* line number */ unsigned short extra;/* extra data for XPath/XSLT */;可以看到,節(jié)點之間是以鏈表和樹兩種方式同時組織起來的,next和prev指針可以組成鏈表,而
33、parent和children可以組織為樹。同時還有以下重要元素:節(jié)點中的文字內(nèi)容:content;節(jié)點所屬文檔:doc;節(jié)點名字:name;節(jié)點的namespace:ns;節(jié)點屬性列表:properties;Xml文檔的操作其根本原理就是在節(jié)點之間移動、查詢節(jié)點的各項信息,并進行增加、刪除、修改的操作。xmlDocSetRootElement函數(shù)可以將一個節(jié)點設置為某個文檔的根節(jié)點,這是將文檔與節(jié)點連接起來的重要手段,當有了根結點以后,所有子節(jié)點就可以依次連接上根節(jié)點,從而組織成為一個xml樹。6)節(jié)點集合類型xmlNodeSet、指針xmlNodeSetPtr節(jié)點集合代表一個由節(jié)點組成的變
34、量,節(jié)點集合只作為Xpath的查詢結果而出現(xiàn)(XPATH的介紹見后面),因此被定義在xpath.h中,其定義如下:/* A node-set (an unordered collection of nodes without duplicates).*/typedef struct _xmlNodeSet xmlNodeSet;typedef xmlNodeSet *xmlNodeSetPtr;struct _xmlNodeSet int nodeNr; /* number of nodes in the set */ int nodeMax; /* size of the array as
35、allocated */ xmlNodePtr *nodeTab;/* array of nodes in no particular order */ /* with_ns to check wether namespace nodes should be looked at */;可以看出,節(jié)點集合有三個成員,分別是節(jié)點集合的節(jié)點數(shù)、最大可容納的節(jié)點數(shù),以及節(jié)點數(shù)組頭指針。對節(jié)點集合中各個節(jié)點的訪問方式很簡單,如下:xmlNodeSetPtr nodeset = XPATH查詢結果;for (int i = 0; i nodeNr; i+)nodeset-nodeTabi;注意,libxm
36、l2是一個c函數(shù)庫,因此其函數(shù)和數(shù)據(jù)類型都使用c語言的方式來處理。如果是c+,我想我寧愿用STL中的vector來表示一個節(jié)點集合更好,而且沒有內(nèi)存泄漏或者溢出的擔憂。五、使用Libxml2項目中要實現(xiàn)一個管理XML文件的后臺程序,需要對XML文件進行創(chuàng)建,解析,修改,查找等操作,下面介紹如何利用libxml2提供的庫來實現(xiàn)上述功能。1、創(chuàng)建XML文檔:我們使用xmlNewDoc()來創(chuàng)建XML文檔,然后使用xmlNewNode(),xmlNewChild(),xmlNewProp(),xmlNewText()等函數(shù)向XML文件中添加節(jié)點及子節(jié)點,設置元素和屬性,創(chuàng)建完畢后用xmlSaveFo
37、rmatFileEnc()來保存XML文件到磁盤(該函數(shù)可以設置保存XML文件時的編碼格式)。示例1: #include #include #include int main(int argc, char *argv) xmlDocPtr doc = NULL; /* document pointer */ xmlNodePtr root_node = NULL, node = NULL, node1 = NULL;/* node pointers */ / Creates a new document, a node and set it as a root node doc = xmlNe
38、wDoc(BAD_CAST 1.0); root_node = xmlNewNode(NULL, BAD_CAST root); xmlDocSetRootElement(doc, root_node); /creates a new node, which is attached as child node of root_node node. xmlNewChild(root_node, NULL, BAD_CAST node1,BAD_CAST content of node1); / xmlNewProp() creates attributes, which is attached
39、to an node. node=xmlNewChild(root_node, NULL, BAD_CAST node3, BAD_CASTnode has attributes); xmlNewProp(node, BAD_CAST attribute, BAD_CAST yes); /Here goes another way to create nodes. node = xmlNewNode(NULL, BAD_CAST node4); node1 = xmlNewText(BAD_CASTother way to create content); xmlAddChild(node,
40、node1); xmlAddChild(root_node, node); /Dumping document to stdio or file xmlSaveFormatFileEnc(argc 1 ? argv1 : -, doc, UTF-8, 1); /*free the document */ xmlFreeDoc(doc); xmlCleanupParser(); xmlMemoryDump();/debug memory for regression tests return(0); 編譯:gcc -o xmlCreator xmlCreator.cpp-I/home/usr/l
41、ibxml2/xmlinst/include/libxml2/ -L /home/usr/libxml2/xmlinst/lib/ -lxml2 (綠色文字為libxml2安裝路徑) -I后接頭文件目錄 -L后接lib庫目錄2、解析XML文檔 解析文檔時僅僅需要文件名并只調(diào)用一個函數(shù),并有錯誤檢查,常用的相關函數(shù)有xmlParseFile(),xmlParseDoc(),獲取文檔指針后,就可以使用xmlDocGetRootElement()來獲取根元素節(jié)點指針,利用該指針就可以在DOM樹里漫游了,結束后要調(diào)用xmlFreeDoc()釋放。示例2: xmlDocPtr doc; /定義解析文檔指
42、針 xmlNodePtr cur; /定義結點指針(你需要它為了在各個結點間移動) xmlChar *key; doc = xmlReadFile(url, MY_ENCODING, 256); /解析文件 /*檢查解析文檔是否成功,如果不成功,libxml將指一個注冊的錯誤并停止。一個常見錯誤是不適當?shù)木幋a。XML標準文檔除了用UTF-8或UTF-16外還可用其它編碼保存。如果文檔是這樣,libxml將自動地為你轉換到UTF-8。更多關于XML編碼信息包含在XML標準中。*/ if (doc = NULL ) fprintf(stderr,Document not parsed succes
43、sfully. n); return; cur = xmlDocGetRootElement(doc); /確定文檔根元素 /*檢查確認當前文檔中包含內(nèi)容*/ if (cur = NULL) fprintf(stderr,empty documentn); xmlFreeDoc(doc); return; /*在這個例子中,我們需要確認文檔是正確的類型?!皉oot”是在這個示例中使用文檔的根類型。*/ if (xmlStrcmp(cur-name, (const xmlChar *) root) fprintf(stderr,document of the wrong type, root n
44、ode != root); xmlFreeDoc(doc); return; cur = cur-xmlChildrenNode; while(cur!=NULL) if (!xmlStrcmp(cur-name, (const xmlChar *)keyword) key = xmlNodeListGetString(doc, cur-xmlChildrenNode, 1); printf(keyword: %sn, key); xmlFree(key); cur = cur-next; xmlFreeDoc(doc); 3、修改XML元素及屬性等信息要修改XML文檔里的元素及屬性等信息,先
45、需要解析XML文檔,獲得一個節(jié)點指針(xmlNodePtr node),利用該節(jié)點指針漫游DOM樹,就可以在XML文檔中獲取,修改,添加相關信息。示例3: 得到一個節(jié)點的內(nèi)容: xmlChar *value = xmlNodeGetContent(node); 返回值value應該使用xmlFree(value)釋放內(nèi)存得到一個節(jié)點的某屬性值: xmlChar *value = xmlGetProp(node, (const xmlChar *)prop1); 返回值需要xmlFree(value)釋放內(nèi)存 設置一個節(jié)點的內(nèi)容: xmlNodeSetContent(node, (const x
46、mlChar *)test);設置一個節(jié)點的某屬性值: xmlSetProp(node, (const xmlChar *)prop1, (const xmlChar *)v1); 添加一個節(jié)點元素: xmlNewTextChild(node, NULL, (const xmlChar *)keyword, (const xmlChar *)test Element); 添加一個節(jié)點屬性: xmlNewProp(node, (const xmlChar *)prop1, (const xmlChar *)test Prop);4、查找XML節(jié)點有時候對一個XML文檔我們可能只關心其中某一個或某
47、幾個特定的Element的值或其屬性,如果漫游DOM樹將是很痛苦也很無聊的事,利用XPath可以非常方便地得到你想的Element。下面是一個自定義函數(shù):示例4: xmlXPathObjectPtr get_nodeset(xmlDocPtr doc, const xmlChar *xpath) xmlXPathContextPtr context; xmlXPathObjectPtr result; context = xmlXPathNewContext(doc); if (context = NULL) printf(context is NULLn); return NULL; res
48、ult = xmlXPathEvalExpression(xpath, context); xmlXPathFreeContext(context); if (result = NULL) printf(xmlXPathEvalExpression return NULLn); return NULL; if (xmlXPathNodeSetIsEmpty(result-nodesetval) xmlXPathFreeObject(result); printf(nodeset is emptyn); return NULL; return result; 在doc指向的XML文檔中查詢滿足x
49、path表達式條件的節(jié)點,返回滿足這一條件的節(jié)點集合查詢條件xpath的寫法參見xpath相關資料。在查詢完畢獲取結果集后,就可以通過返回的 xmlXPathObjectPtr 結構訪問該節(jié)點:示例5: xmlChar *xpath = (/root/node/key=keyword); xmlXPathObjectPtr app_result = get_nodeset(doc,xpath); if (app_result = NULL) printf(app_result is NULLn); return; int i = 0; xmlChar *value; if(app_result
50、) xmlNodeSetPtr nodeset = app_result-nodesetval; for (i=0; i nodeNr; i+) cur = nodeset-nodeTabi; cur = cur-xmlChildrenNode; while(cur!=NULL) value = xmlGetProp(cur,(const xmlChar *)key); if (value != NULL) printf(value: %snn, d_ConvertCharset(utf-8, GBK, (char *)value); xmlFree(value); value = xmlNodeGetContent(cur); if (value != NULL) printf(value: %snn, d_ConvertCharset(utf-8, GBK, (char *)value); xmlFree(value); xmlXPathFreeObject (app_result); 通過get_nodeset()返回的結果集,我們可以獲取該節(jié)點的元
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年羅馬柱古典建筑修復工程驗收合同3篇
- 廣廈結構課程設計
- 物流運輸包裝課程設計oppo
- 物聯(lián)網(wǎng)智能小車課程設計
- PET再生料項目評價分析報告
- 2024年旅游產(chǎn)品開發(fā)委托單項服務合同3篇
- 2024年海外采購協(xié)議:商品引進合同模板
- 電梯課程設計思路
- 電工儀表用戶個性化定制考核試卷
- 2024年版權轉讓合同:文學作品與授權
- 電力安全風險分級管控與隱患排查治理雙重預防機制建設工作方案
- 城市管理學期末考試復習題及答案
- 自考02313電力系統(tǒng)微型計算機繼電保護歷年(12-19)真題試卷
- 馬克思主義基本原理智慧樹知到答案章節(jié)測試2023年重慶工商大學
- 2023年電動力學復習題庫更新版
- GB/T 33322-2016橡膠增塑劑芳香基礦物油
- GB/T 15905-1995硫化橡膠濕熱老化試驗方法
- 中央空調(diào)空調(diào)年度維保報價單
- (新平臺)國家開放大學《工程數(shù)學(本)》形成性考核作業(yè)1-5參考答案
- ommaya囊的護理教學課件
- 統(tǒng)計與概率的教材梳理講稿
評論
0/150
提交評論