<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ReadXmlxml 文件讀寫插件

          聯(lián)合創(chuàng)作 · 2023-09-29 22:40

          本插件實現(xiàn)對xml文件的讀寫,此版本只實現(xiàn)對標(biāo)準(zhǔn)xml文檔的標(biāo)簽,標(biāo)簽屬性,標(biāo)簽值,預(yù)定義的實體引用進(jìn)行處理。由C語言實現(xiàn),較適合處理大型xml文檔,處理速度較快。本插件遵循GPL協(xié)議。

          術(shù)語

          開始標(biāo)簽:xml中一個標(biāo)簽對的開始的標(biāo)簽。
          結(jié)束標(biāo)簽:xml中一個標(biāo)簽對的結(jié)束的標(biāo)簽。
          值內(nèi)存池:專門用于存儲值的內(nèi)存。
          行Buffer:存儲讀取xml文件一行內(nèi)容的內(nèi)存。
          空白字符:本程序中只代表文本中的空格,tab鍵值兩個非可見字符
          標(biāo)簽名:略。
          標(biāo)簽屬性:略。
          標(biāo)簽屬性值:略。
          標(biāo)簽值:略。
          注:為敘述方便,下文中,標(biāo)簽名以key,標(biāo)簽屬性以property,標(biāo)簽屬性值以property_value,標(biāo)簽值以value表示。

          文件

          • read_xml.h -- read_xml頭文件

          • read_xml.c -- read_xml源碼

          • ReadMe.md -- read_xml說明文檔

          • xml.xml -- 示例xml文件

          • libread_xml.so -- 封裝的linux動態(tài)庫

          • read_xml.lib -- VisualStudio2015生成的windows編譯動態(tài)庫接口

          • read_xml.dll -- 封裝的windows動態(tài)庫

          • test.c --示例

          處理限制

           1.文本限制

          • 單個標(biāo)簽自身(無論是開始標(biāo)簽還是結(jié)束標(biāo)簽)不能跨行。

          • xml文件頭中xml版本和字符集信息中的空格不做處理。

          • 開始標(biāo)簽的第一個屬性與標(biāo)簽名之間必須有一個或多個空白字符。

          • 值中間和結(jié)尾的空白字符鍵默認(rèn)保留,而值開頭的空白字符將被刪除。

          • 標(biāo)準(zhǔn)的引用:&lt; &gt; &amp; &apos; &quot; 。一個引用之中不能有空白字符,否則做普通字符處理。

          • value與開始標(biāo)簽之間的空格或tab鍵值默認(rèn)不存儲為值的一部分,但值與結(jié)束標(biāo)簽之間的空格或tab鍵值默認(rèn)作為值的一部分。

          • 不驗證xml的合法性。雖然程序已經(jīng)盡可能的提高容錯性,但請使用者自行盡可能地保證所讀寫的xml符合規(guī)范,不規(guī)范的xml不保證能正確處理。

          2.數(shù)值限制

          • 值內(nèi)存池:5M——整個文檔標(biāo)簽的值,每個值字符串附加一個'\0'字符。合計最大為5M。

          • 行Buffer大小:1024 byte。

          • 標(biāo)簽名:<=127 byte。

          • 屬性名:<=63 byte。

          • 屬性值:<=63 byte。

          • 標(biāo)簽值:理論上單個標(biāo)簽值的大小為值內(nèi)存池大小,但也受行Buffer大小的限制。即值可以跨行,但該值的每一行字符數(shù)應(yīng)<=1024個字符。

          存儲方法 

          存儲內(nèi)容:標(biāo)簽名,屬性名,屬性值,值。
          存儲結(jié)構(gòu):伸展樹,雙向鏈表。

          伸展樹
          存儲xml內(nèi)容,但不體現(xiàn)xml的從屬結(jié)構(gòu)。結(jié)點為KeyNode,以key檢索元素。xml主體中所有同名標(biāo)簽下的所有property,property_value,value都以雙向鏈表的形式存儲在同一個KeyNode下的properties,values。
          伸展樹由靜態(tài)全局變量LABEL_TREE管理,其中LABEL_TREE->root指向伸展樹的根節(jié)點。

          XML_LIST
          不存儲xml內(nèi)容,但體現(xiàn)xml的從屬結(jié)構(gòu)。XML_LIST,以及XML_LIST中是一個雙向鏈表,結(jié)點為XML,每個結(jié)點代表xml文本中的一個標(biāo)簽及其子標(biāo)簽整體,其子標(biāo)簽存儲在child_list中,也是雙向鏈表。XML_LIST自身并不存儲任何xml元素,只引用自伸展樹。
          XML_LIST的頭節(jié)點為靜態(tài)全局變量XML_LIST。
          此外,伸展樹結(jié)點中的標(biāo)簽屬性、值的鏈?zhǔn)酱鎯σ矠殡p向鏈表。

          關(guān)于存儲結(jié)構(gòu)的詳細(xì)信息請參看read_xml.h文件。

          使用方法

          • 源碼編譯
            源碼中不涉及C99特征,因read_xml屬于插件范疇,故read_xml以動態(tài)庫的形式呈現(xiàn),所以read_xml.c中并沒有主函數(shù),且原則上只對外提供非static修飾的函數(shù)。用戶可自己編譯,文檔結(jié)構(gòu)十分簡單,只有一個.c文件和一個同名的.h文件。用戶可自行對read_xml.h中的一些宏,主要是針對各種Buffer的大小進(jìn)行配置。

          • 函數(shù)調(diào)用
            請參考read_xml.h文件對各個函數(shù)的說明。

          瀏覽 10
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一区二区三区无码中文 | 影音先锋啪 | 91兑费福利网 | 日本伊人大香蕉 | 亚洲人成亚洲人成在线观看 |