iOS HTML解析庫Ono的一個缺陷

以前寫的,不知道怎么就不見了,重發(fā)
Ono是iOS & OS X平臺一個優(yōu)秀的XML、HTML解析庫,內(nèi)部其實是對libxml2的封裝。最近在使用的時候遇到了一個bug缺陷。
業(yè)務代碼如下:

ONOXMLDocument *document = [ONOXMLDocument HTMLDocumentWithString:htmlString encoding:NSUTF8StringEncoding error:nil];
ONOXMLElement *element = [document firstChildWithXPath:@"/html/body/div"];
NSString *htmlContent = element.description;

這段代碼的目的是提取html中的第一個div元素,通過XPath找到元素后調(diào)用description方法獲得元素的html字符串。然而,解析之后發(fā)現(xiàn)<tag></tag>這樣的空內(nèi)容標簽變成了<tag />。這種變化對XML來說沒什么影響,但是對HTML影響很大,舉個例子:

<h1></h1><p>hello world</p>

代碼效果差不多是這樣的


調(diào)用description之后的html

<h1/><p>hello world</p>

效果差不多是這樣的


后面的<p>標簽被加上<h1>的效果。
問題就出在description方法上,它的實現(xiàn)是這樣的

- (NSString *)description {
    xmlBufferPtr buffer = xmlBufferCreate();
    xmlNodeDump(buffer, self.xmlNode->doc, self.xmlNode, 0, false);
    NSString *rawXMLString = @((const char *)xmlBufferContent(buffer));
    xmlBufferFree(buffer);
    return rawXMLString;
}

xmlNodeDump得到的是去除空標簽的buff。經(jīng)過一番搜索,網(wǎng)上提到要使用xmlsave模塊,保存的時候options加上XML_SAVE_NO_EMPTY。修改之后的代碼;

- (NSString *)description {
    xmlBufferPtr buffer = xmlBufferCreate();
    xmlSaveCtxtPtr saveCtxtPtr = xmlSaveToBuffer(buffer,NULL, XML_SAVE_NO_EMPTY);
    long result = xmlSaveTree(saveCtxtPtr, self.xmlNode);
    xmlSaveClose(saveCtxtPtr);
    NSString *rawXMLString = result < 0 ? nil : @((const char *)xmlBufferContent(buffer));
    xmlBufferFree(buffer);
    return rawXMLString;
}

一個挺簡單的問題解決,希望能幫到遇到同樣問題的人。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、網(wǎng)盤地址:https://pan.baidu.com/s/1dFBvLpJ 密碼: x67x 2、項目地址:h...
    Babyzpj閱讀 582評論 0 0
  • 類加載的過程 類加載的全過程,加載,驗證,準備,解析和初始化這五個階段。 加載 在加載階段,虛擬機需要完成以下三件...
    esfak47閱讀 274評論 0 0
  • 月明半盞掛窗沿,孤心悠悠自影憐。秋黃葉散知根處,一如翩翩似少年。 泥洼盛著雨的愛,雨襯著未亡的哀,大雨過后,世界似...
    吾欲閱讀 283評論 0 1
  • 前段時間和大寶說了,寒假讓她自己學著梳頭發(fā)。今早大寶苦苦哀求讓我給她梳頭發(fā),還講了好多歪理,我忍住狠下心,不去...
    軒萌媽閱讀 111評論 0 0
  • 身邊有缺鈣的胖紙嗎?聽說瘦不下來,還跟缺鈣有!關(guān)!系! 這讓運動之心雄起的胖紙,情何以堪?!很藍瘦,藍瘦很! 1....
    不驚云的云閱讀 631評論 0 4

友情鏈接更多精彩內(nèi)容