2012-08-01 40 views
0

我也許有一個愚蠢的問題。比方說,我們有一個字符串:HTML標籤封閉的抽取子字符串Coldfusion

"my name <em>is</em> Tom <em>Papas</em> and I am 30 <em>years</em> of age<em>!</em>" 

的問題是:我們如何提取封閉的<em>標籤,並將其輸出作爲一個列表,陣列或逗號內使用ColdFusion分隔字符串子?請注意,我們不知道標籤中包含了哪些子字符串。我們需要盲目提取子串。

謝謝你在前進,

湯姆

希臘

+3

**使用[jsoup](http://jsoup.org)** - 如果您遇到問題,請搜索詳細信息(例如Ben Nadel之前曾經對此進行了博客),如果在此之後,你仍然堅持回來,告訴你已經嘗試了什麼,以及你的問題是什麼。 – 2012-08-01 21:29:02

+0

@PeterBoughton我認爲你應該把它作爲答案。 :) – Henry 2012-08-01 21:45:17

+0

鄧諾。它更像一個指針而不是答案?我沒有時間寫一個關於如何使用CF的jSoup的詳細解釋,但是如果有其他人願意,他們非常歡迎這樣做。 :) – 2012-08-01 21:59:43

回答

2

下載jsoup,並把罐子在CF的lib文件夾

html = "my name <em>is</em> Tom <em>Papas</em> and I am 30 <em>years</em> of age<em>!</em>"; 

dom = createObject("java", "org.jsoup.Jsoup").parse(html); 
emElements = dom.getElementsByTag("em"); 

results = []; 
for (em in emElements) 
    arrayAppend(results, em.text()); 

欲瞭解更多信息:http://www.bennadel.com/blog/2358-Parsing-Traversing-And-Mutating-HTML-With-ColdFusion-And-jSoup.htm

或使用基本的Regex

matches = rematch("<em>[^<]*</em>", html); 
results = []; 
for (match in matches) 
    arrayAppend(results, rereplace(match, "<em>(.*)</em>", "\1")); 
+0

很多tahnks我的朋友。我還有一個問題。我注意到,使用標記語法,它使用腳本語法(與jsoup示例有關)是相反的。也許這是我窮人的前進技巧。注意我使用openBD作爲CFML服務器。在以下兩點意見如下的代碼塊,我tryied上openBD: – anarchos78 2012-08-02 09:47:38

+0

標籤語法(工作):「我的名字湯姆帕帕斯和我30年的年齡」' 列表(標籤編碼):#myList中# ' – anarchos78 2012-08-02 09:48:30

+0

腳本語法(不工作):' HTML =「我的名字湯姆帕帕斯我是年齡「; dom = createObject(」java「,」org.jsoup.Jsoup「)。parse(html); emElements = dom。getElementsByTag( 「EM」); results = []; (emElements) arrayAppend(results,em.text()); (「列表(腳本編碼):」&(ArrayToList(results,「,」))); <! - \t名單(腳本編碼):#myList中# --->' – anarchos78 2012-08-02 09:49:48

1

在CF 10或Railo 4,你可以用Underscore.cfc的map()函數結合XMLPARSE(),像這樣:

str = "my name <em>is</em> Tom <em>Papas</em> and I am 30 <em>years</em> of age<em>!</em>"; 
str = "<myWrapper>" & str & "</myWrapper>"; 
xmlObj = XmlParse(str); 
resultAsArray = _.map(xmlObj.myWrapper.xmlChildren, function (val) { 
    return val.xmlText; 
}); 

(聲明:我寫Underscore.cfc)

+0

謝謝你的回覆。 Underscore.cfc是一個真正的貢獻!不幸的是我使用的是openBD CFML服務器,但這不是重點。下面的岩石!再次做得好! – anarchos78 2012-08-04 06:36:48

+0

嘿謝謝!我真的很感激反饋。僅供參考,我想讓Underscore在OpenBD上工作,但他們沒有任何計劃來支持匿名函數,這會殺死那個想法:( – Russ 2012-08-05 16:39:58

相關問題