hpple功能有限,使用的時候要注意乙個原則:如果頁面複雜,節點較多,解析的html需要先擷取,xpath路徑盡可能短,使用簡單語法。
xpath語法不再贅述,本文的話題是分析得到的乙個tfhppleelement陣列。
對於陣列裡的某個tfhppleelement可能有如下結構:
,
);nodechildarray = (
);nodename = a;
},);
nodename = div;
}
乙個完備的節點一般包括屬性陣列,子節點陣列,節點名三部分。乙個節點的型別由節點名字決定。像上面就包含了div,a和text三種節點。任一節點是字典型別的。
假設我們令elem為指向上述結構的指標,則
[elem children];得到子節點陣列
[elem childrenwithtagname:@"text"];可以得到div節點的所有文字子節點。
[elem firstchildrenwithtagname:@"text"];則可以得到div節點的第乙個文字節點。
[elem tagname]; 則得到@"div"
[elem attributes];可以得到div的屬性字典,顯然這裡沒
這裡我們引入指向子節點a的指標a,則
[a objectforkey:@「href」];得到@"/character/ch0146096/?ref_=ttfc_fc_cl_t1"
[a firsttextchild]content]; 得到@「"tyrion lannister"
[a text];此處和上句效果一致,返回第乙個文字節點的內容
但是[elem text]為@"\n \u00a0"
本例中我們沒用到- (nsarray*) childrenwithclassname:(nsstring*)classname和- (tfhppleelement *) firstchildwithclassname:(nsstring*)classname
顯然class和tagname是地位等同的,對於如下情況,我們就可以使用上述方法
a paragraph.
note that this is an important paragraph.
設elem指向body節點,[elem childrenwithclassname:@"intro"]列印出來就是:
elem is (
"\n );
\n nodechildarray = (\n
\n );
\n nodename = h1;\n}"
)
補充一點,對於a的某個屬性節點,結構為
);nodename = href;
}
乙個屬性節點沒有屬性陣列,只有文字子節點陣列和節點名。
hpple 簡單使用
最近專案使用到hpple,簡單說一下使用方式,做做筆記 let responsedata response as nsdata let utf8html responsedata.stringgbk stringbyreplacingoccurrencesofstring gb2312 withst...
DLL使用的幾個注意點
dll 的幾個注意點 1.dll 重定向技術,windows2000之後的功能,將優先從exe執行目錄尋找 之前都是優先從system下面尋找的 2.dll的入口函式dllmain 以及入口引數dll process attach等 dll通過使用計數來記錄載入次數 3.dll的延遲載入,可以在使用...
CEF使用的幾個注意點
cef為chrome瀏覽器的切入其他瀏覽器中的輕量級框架。開發的客戶端的時候,這是作為介面顯示的首先,可以增強客戶的易變性,可塑性。1.cef如何禁用右鍵屬性 手動寫乙個cclient來繼承 cefmenuhandler這個抽象類,然對其下面的純虛函式進行重寫 1 virtual bool onbe...