青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

積木

No sub title

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

常用鏈接

留言簿(1)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

原文轉自:http://www.shnenglu.com/tx7do/archive/2006/04/24/6146.html 

TinyXml學習筆記

張弛 <zhangchi@china.com>

一、      TinyXml 的特點

TinyXml 是一個基于 DOM 模型的、非驗證的輕量級 C++ 解釋器。

1.      SAX  DOM

目前 XML 的解析主要有兩大模型: SAX  DOM 

其中 SAX 是基于事件的,其基本工作流程是分析 XML 文檔,當發現了一個新的元素時,產生一個對應事件,并調用相應的用戶處理函數。這種方式占用內存少,速度快,但用戶程序相應得會比較復雜。

 DOM (文檔對象模型),則是在分析時,一次性的將整個 XML 文檔進行分析,并在內存中形成對應的樹結構,同時,向用戶提供一系列的接口來訪問和編輯該樹結構。這種方式占用內存大,速度往往慢于 SAX ,但可以給用戶提供一個面向對象的訪問接口,對用戶更為友好。

另據說,一些同時提供了 SAX  DOM 接口的庫,是在底層先實現 SAX ,再在 SAX 的基礎上實現 DOM 

目前我知道的 XML 解析庫有下面幾個:

名稱

訪問接口

是否支持驗證

備注

Expat

SAX/Local

不清楚

Local 指它還有一套自己訪問模型

LibXML2

SAX/DOM

 

TinyXml

DOM

 

XML4C

SAX/DOM

 Xerces-C 是一家,不過用了 ICU ,國際化似乎更好

Xerces-C

SAX/DOM

 

XML Booster

Local

不清楚

這個庫不是特別了解,好像是類似 yacc 那樣,可以生成一個特定的解析器,估計效率應該很高(看名字也像)。

 

2.      驗證和非驗證

對于一個特定的 XML 文檔而言,其正確性分為兩個層次。首先是其格式應該符合 XML 的基本格式要求,比如第一行要有聲明,標簽的嵌套層次必須前后一致等等,符合這些要求的文件,就是一個合格的 XML 文件,稱作 well-formatted 。但除此之外,一個 XML 文檔因其內容的不同還必須在語義上符合相應的標準,這些標準由相應的 DTD 文件或者 Schema 文件來定義,符合了這些定義要求的 XML 文件,稱作 valid 

因此,解析器也分為兩種,一種是驗證的,即會跟據 XML 文件中的聲明,用相應的 DTD 文件對 XML 文件進行校驗,檢查它是否滿足 DTD 文件的要求。另一種是忽略 DTD 文件,只要基本格式正確,就可以進行解析。

就我所知,驗證的解析器通常都是比較重量級的。 TinyXml 不支持驗證,但是體積很小,用在解析格式較為簡單的 XML 文件,比如配置文件時,特別的合適。

 

二、      TinyXml 的構建和使用

1.      獲取

TinyXml 首頁在 http://www.grinninglizard.com/tinyxml/index.html ,從這里可以找到最新版本的源代碼,目前的版本是 2.3.4 

2.      構建

TinyXml 在構建時可以選擇是否支持 STL ,選擇的話,則可以使用 std::string ,所以通常應該打開這個選項。

 Windows 上, TinyXml 的源碼包里提供了 VC6 的工程文件,直接用它就可以生成兩個靜態庫(帶 STL 和不帶 STL ),非常容易。唯一需要注意的是,默認生成的庫是單線程的,如果用在多線程的項目中,需要改動一下配置,生成相應的多線程庫。

 Unix 平臺上, TinyXml 的源碼包里只提供了一個 Makefile ,對于典型的 Linux 系統,或裝了 gcc  gmake 的其他 Unix ,這個 Makefile 足夠用了,我在 RH9  RHEL4 上測試,簡單的 make 就成功了。需要注意的有以下幾點:默認的編譯是不支持 STL 的,可以通過編輯 Makefile  TINYXML_USE_STL := NO 那一行,把 NO 改成 YES 就可以支持 STL 了;還有默認只生成了一個測試程序,沒有生成任何庫,如果要生成靜態庫的話,可以用ar 命令,將生成的幾個目標文件打包就行了,如果要生成動態庫,則需要加上 -fpic 參數重新編譯。

3.      使用

構建了相應的庫之后,在使用了它們的工程中,只要在連接時把他們連上就行了。需要注意的是,如果需要 STL 支持,在編譯用到了 TinyXml 的文件時,需要定義一個宏 TIXML_USE_STL ,對 gcc ,可以使用參數 -DTIXML_USE_STL ,對 cl.exe  VC ),可以使用參數 /DTIXML_USE_STL ,如果嫌麻煩,可以直接定義在 tinyxml.h 文件里。

 

三、      TinyXml 的編程模型

1.      類之間的關系

TinyXml 實現的時 DOM 訪問模型,因此提供了一系列的類對應 XML 文件中的各個節點。主要類間的關系如下圖所示:

TiXmlBase :其他類的基類,是個抽象類

TiXmlNode :表示一個節點,包含節點的一般方法,如訪問自節點、兄弟節點、編輯自身、編輯子節電

TiXmlDocument :表示整個 XML 文檔,不對應其中某個特定的節點。

TiXmlElement :表示元素節點,可以包含子節點和 TiXmlAttribute

TiXmlComment :表示注釋

TiXmlDeclaration :表示聲明

TiXmlText :表示文本節點

TiXmlUnknown :表示未知節點,通常是出錯了

TiXmlAttribute :表示一個元素的屬性

下面是一個簡單的例子:

<?xml version="1.0" encoding="utf-8" ?>

<!-This is only a sample-->

<book>

       <name>TinyXml How To</name>

       <price unit=”RMB”>20</price>

       <description>Some words…</description>

</ book >

整個文檔,對應 TiXmlDocument

book,name,price , description ,都對應 TiXmlElement

第一行對應一個 TiXmlDeclaration

第二行對應一個 TiXmlComment

“TinyXml How To” 對應一個 TiXmlText

unit 則是 price 的一個 TiXmlAttribute

這些類與 XML 文件中的相應元素都有很好的對應關系,因此相信參照 TinyXml 的文檔,可以很容易的掌握各個方法的使用。

 

2.      需要注意的問題

各類之間的轉換

由于各個節點類都從 TiXmlNode 繼承,在使用時常常需要將 TiXmlNode * 類型的指針轉換為其派生類的指針,在進行這種轉換時,應該首先使用由 TiXmlNode 類提供的一系列轉換函數,如 ToElement (void) ,而不是 c++ dynamic_cast

 

檢查返回值

由于 TinyXml 是一個非校驗的解析器,因此當解析一個文件時,很可能文件并不包含我們預期的某個節點,在這種情況下, TinyXml 將返回空指針。因此,必須要對返回值進行檢查,否則將很容易出現內存訪問的錯誤。

 

如何重頭建立一個 XML 文件

先建立一個 TiXmlDocument 對象,然后,載入某個模板,或者直接插入一個節點作為根節點,接著就可以像打開一個已有的 XML 文件那樣對它進行操作了。

 

四、      總結

TinyXml 最大的特點就是它很小,可以很方便的靜態連接到程序里。對于像配置文件、簡單的數據文件這類文件的解析,它很適合。但是由于它是非驗證的,因此需要在程序里做許多檢查工做,加重了程序編寫的負擔。因此對于復雜的 XML 文件,我覺得最好還是用驗證的解析器來處理。

posted on 2012-02-14 17:40 Jacc.Kim 閱讀(369) 評論(0)  編輯 收藏 引用 所屬分類: VC / C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区高清| 亚洲欧美一区二区视频| 久久这里只有| 亚洲国产aⅴ天堂久久| 欧美jizzhd精品欧美喷水| 久久嫩草精品久久久精品一| 在线观看日韩av| 亚洲承认在线| 亚洲国产欧美日韩精品| 蜜臀av在线播放一区二区三区| 久久激情五月丁香伊人| 亚洲电影免费在线| 91久久在线| 国产乱码精品| 免费在线看成人av| 欧美日韩另类丝袜其他| 亚洲欧美国产va在线影院| 羞羞视频在线观看欧美| 亚洲国产精品久久久| 日韩视频一区二区| 国产精品永久免费视频| 欧美www视频在线观看| 欧美精品一区二区三区一线天视频 | 欧美在线观看视频一区二区| 久久久av毛片精品| 夜夜躁日日躁狠狠久久88av| 亚洲欧美另类综合偷拍| 亚洲第一主播视频| 亚洲色图制服丝袜| 亚洲第一页自拍| 一区二区三区四区五区在线 | 欧美/亚洲一区| 亚洲一区在线免费| 久久香蕉国产线看观看av| 亚洲一卡久久| 另类激情亚洲| 久久精品91| 欧美日韩免费看| 免费毛片一区二区三区久久久| 欧美午夜精品久久久久免费视| 久久亚洲春色中文字幕| 欧美性大战xxxxx久久久| 欧美va日韩va| 国语自产精品视频在线看抢先版结局| 亚洲国产天堂久久综合网| 国产一区视频在线观看免费| 中国亚洲黄色| 日韩一区二区福利| 老色批av在线精品| 久久久久久久999| 国产精品亚洲一区| 一区二区三区久久网| 日韩视频三区| 欧美成人在线网站| 免费看的黄色欧美网站| 国内外成人免费激情在线视频| 亚洲午夜久久久| 亚洲午夜精品久久久久久app| 欧美激情在线狂野欧美精品| 蜜乳av另类精品一区二区| 国产欧美一区二区精品秋霞影院| 一区二区三区欧美激情| 一区二区久久| 欧美肉体xxxx裸体137大胆| 欧美激情一区二区在线 | 亚洲国产成人av在线| 久久精品国产免费看久久精品| 欧美一区免费视频| 国产免费成人av| 欧美一级二级三级蜜桃| 欧美在线视频a| 国内精品一区二区| 老司机亚洲精品| 亚洲国产成人一区| 亚洲美女视频| 欧美视频在线一区| 亚洲自拍偷拍网址| 久久久久**毛片大全| 影音先锋亚洲精品| 久久综合网色—综合色88| 亚洲第一区在线观看| 亚洲美女性视频| 国产精品美女一区二区在线观看| 亚洲一区二区成人| 久久久久久97三级| 亚洲日本无吗高清不卡| 欧美日韩在线另类| 亚洲综合三区| 老司机精品导航| 一本综合精品| 国内激情久久| 欧美精品亚洲精品| 亚洲图片自拍偷拍| 久久这里只有| 亚洲午夜女主播在线直播| 国产精品午夜av在线| 久久久久免费视频| 亚洲日本中文字幕免费在线不卡| 亚洲欧美制服另类日韩| 狠狠色2019综合网| 欧美日韩美女| 久久久久网站| 一本色道久久综合狠狠躁篇的优点 | 欧美体内she精视频| 西西人体一区二区| 亚洲成色999久久网站| 亚洲欧美中日韩| 亚洲国产天堂久久综合网| 国产精品成人一区二区三区吃奶 | 亚洲最黄网站| 久久乐国产精品| 一区二区欧美精品| 一区二区三区在线免费观看| 欧美视频官网| 蜜臀91精品一区二区三区| 亚洲一级片在线看| 91久久在线视频| 久久全球大尺度高清视频| 9l国产精品久久久久麻豆| 激情小说另类小说亚洲欧美| 欧美日韩一区二区三区四区五区| 久久免费黄色| 午夜精品影院在线观看| 亚洲乱亚洲高清| 欧美阿v一级看视频| 性色av一区二区怡红| 99天天综合性| 亚洲精品乱码久久久久久久久| 国产综合网站| 国产日韩成人精品| 欧美性理论片在线观看片免费| 欧美成人国产| 麻豆国产精品777777在线 | 亚洲福利在线视频| 麻豆精品在线播放| 久久美女性网| 久久午夜色播影院免费高清| 久久av一区二区| 欧美一区二区三区四区在线 | 性视频1819p久久| 在线性视频日韩欧美| 亚洲精品在线三区| 亚洲人妖在线| 亚洲精品孕妇| 99re8这里有精品热视频免费| 亚洲激情专区| 亚洲精品一二| 在线一区二区日韩| 亚洲视频在线免费观看| 亚洲婷婷综合久久一本伊一区| 一二三区精品| 亚洲午夜精品17c| 亚洲专区一二三| 小黄鸭精品aⅴ导航网站入口| 欧美亚洲视频一区二区| 香蕉免费一区二区三区在线观看| 销魂美女一区二区三区视频在线| 午夜久久黄色| 久久久久免费观看| 欧美高清在线精品一区| 亚洲茄子视频| 在线综合亚洲欧美在线视频| 亚洲女人小视频在线观看| 欧美一区二区视频在线观看2020 | 久久久久久久综合| 免费成人av在线| 欧美日韩国产综合一区二区| 欧美性淫爽ww久久久久无| 国产欧美日韩视频一区二区三区| 激情成人中文字幕| 亚洲国产婷婷综合在线精品 | 亚洲视频大全| 欧美中日韩免费视频| 久久亚洲一区二区| 亚洲国产婷婷香蕉久久久久久99| 99精品国产在热久久| 午夜精品久久久久久99热| 老色鬼久久亚洲一区二区| 欧美日韩视频在线第一区| 国产欧美日韩一级| 亚洲精品视频在线观看免费| 亚洲免费一在线| 狼人天天伊人久久| 99精品久久| 久久中文欧美| 国产精品美女主播| 91久久亚洲| 久久久久久9999| 亚洲美女在线看| 久久精品在线视频| 国产精品高潮呻吟| 亚洲韩国日本中文字幕| 久久av一区二区三区| 亚洲人成网站精品片在线观看 | 亚洲午夜精品在线| 免费不卡视频| 黄色精品免费| 久久国产欧美| 亚洲素人在线| 欧美日本在线观看|