您的位置:68399皇家赌场 > 服务器租用 > HTML 资源信息汲取(上篇) - 使用 JDOM 、 TagSoup

HTML 资源信息汲取(上篇) - 使用 JDOM 、 TagSoup

发布时间:2019-05-04 04:16编辑:服务器租用浏览(180)


     

      使用 jQuery 庫的話,只供给同時綁定 oninput 和 onpropertychange 兩個事件就足以了,示例代碼如下:

     

    雜亂無章的 HTML (Malformed and faulty HTML)

    不过眾所週知,尽管存在著如 XHTML 標準規範,網路上還是充斥著各種不适合標準的 HTML 網頁。這個現象,以至還有個專用名詞,叫做 Tag soup。

    而業界①致主见、制訂中的 HTML5 ,面對這樣的現況,並非選擇像 XHTML 2.0 1樣,以放棄向後相容的艺术,以强烈的手腕加以抵制。而是,相反地,對這樣的現況加以包容。由此,能够預見,要想解析 HTML,程式設計師必然無法逃避與 tag soup 的纏鬥。

    回過頭來想,XHTML 的設計思維,是以有利于程式化處理為主要考虑衡量;而 HTML5則以最大相容性為出發,要合营現實中的實際使用供给。有沒有辦法能夠兩者兼得,既能够方便人們撰寫網頁,又能够讓程式方便解析呢?

    答案其實就在前头。瀏覽器,這個當年 Internet 標準大戰的博古通今,雖然對於 tag soup 的留存,也有比非常大的貢獻,但是,從另壹方面來看,瀏覽器其實也是 tag soup 的解藥:瀏覽器能夠將網路上充满的各种各樣不合標準的內容,呈現給使用者觀看,其實是瀏覽器的設計者,竭盡所能,猜測網頁設計者也许的意圖,設法將雜亂不合規格的 HTML 文件,轉換成瀏覽器能夠解讀的格式。

    在 RIA 盛行、Javascript 大行其道的前天,client side 的程式設計師,能够很轻易地透過 Javascript,利用 jQuery 等 famework 很便利地存取瀏覽器解析完畢的 DOM 文件物件模型,赚取须要的資訊。

     

    唯独 server side 呢?除了嵌入 Mozilla 或 Webkit 瀏覽器大旨之外,有沒有更簡單的主意吗?

    為了簡化 HTML 網頁的資訊汲取作業,若能像瀏覽器將 HTML 轉換成 DOM 1樣,將 HTML 網頁(不論是或不是符合標準格式),轉換成標準的 well-formed XML 文件,或是 XHTML。那麼,不就足以行使諸如 XPath 、 XPointer 等標準,利用現成的 API 或工具,隨意存取資訊了嗎?

    正如 html 程式碼,可測試出,input 事件可達成「马上、精準地觸發」;舊有的 change 事件,則须求失去焦點時,或按下 Enter 時,才會被觸發。

      集合 oninput & onpropertychange 監聽輸入框內容變化的言传身教代碼如下:

    jQuery - 普通话輸入法與KeyDown/KeyPress事件

    多年来專案中引用了Telerik ASP.NET擴充元件AutoComplete輸入欄位,測試時發現偶爾會不聽始喚,輸入文字時無法觸發資料查詢,在Javascript Source Code裡反覆追蹤測試,燃燒了可觀的寶貴春青,終於理出頭緒: 問題在普通话輸入法!

    過去模糊地知道普通话輸入在瀏覽器的鍵盤事件行為上稍微独树一帜,但從未深究,這回算是比較清楚探讨之中的差別。其實最明顯的差異是: 切到汉语輸入法後,輸入文字將不會觸發KeyPress事件,只會有KeyDown,而且傳回的e.keyCode會1律是22九。

    寫了1段程式來做實驗:

    排版顯示純文字複製文字

    本身动用倉頡輸入法(New ChangJie 20十),以IE九測試,操作過程及結果如下:

    1. 切換到新倉頡輸入法,點txtTest猎取焦點準備輸入文字
    2. 按【一】(M鍵),出現KeyDown: 229
    3. 按Enter鍵確定選字,此時出現Input!
    4. 按數字1,出現KeyDown: 229跟Input!
    5. 选择滑鼠將輸入法切回英文(不用按鍵切換制止觸發多餘事件)
    6. 按數字2,出現KeyDown: 50、KeyPress: 50以及Input!

    FireFox4測試的結果與IE玖一样。若將IE9切成IE七相容格局,結果不太同样,看來並不扶助Input事件

    1. 切換到新倉頡輸入法,點txtTest获得焦點準備輸入文字
    2. 按【一】(M鍵),出現KeyDown: 229
    3. 按空白鍵選字,再出現KeyDown: 22九
    4. 按數字1,出現KeyDown: 229
    5. 运用滑鼠將輸入法切回英文(不用按鍵切換防止觸發多餘事件)
    6. 按數字2,出現KeyDown: 50、KeyPress: 50

    Chrome10的測試結果為:

    1. 切換到新倉頡輸入法,點txtTest赚取焦點準備輸入文字
    2. 按【一】(M鍵),出現KeyDown: 229跟Input!
    3. 按空白鍵選字,出現KeyDown: 229跟Input!
    4. 按數字1,出現KeyDown: 229跟Input!
    5. 动用滑鼠將輸入法切回英文(不用按鍵切換防止觸發多餘事件)
    6. 按數字2,出現KeyDown: 50、KeyPress: 50以及Input!

    胡亂做個結論:

    • style="color: #ff8040;">輸入欄位啟用中文輸入法時,將不會觸發KeyPress事件,而KeyDown事件中的 KeyCode則固定傳回229。IE九, Firefox 四, Chrome支援按鍵Input事件,在IE9/Firefox四上可輔助判別粤语輸入的細節,但IE七不协理,Chrome的行為分化。www.68399.com,*

    綜合以上觀察,要团结搞出跨瀏覽器能够精準在使用者輸入每個字(不管有輸入法、不管中国和英国文)時觸發的事件,看來是很艱鉅的任務。所幸網路上善心神人多数,找到一個不錯的解法, Cross browser input event for jQuery, 這個Plugin重新包裝了input事件,所以作者們只需寫成:

    $("#txtText").bind("input", function() {
        this.value; //可获得近来的文字內容
    });

    就会在历次輸入中文字或英文字時觸發input事件,雖然無法精確精通每回的按鍵內容,但已可滿足精通中文輸入情势下每一遍文字變動的必要。[2011-04-26補充]要精確抓取每一個按鍵的keyCode,可考慮使用KeyUp事件(但連選字時的上下鍵,送字的Space都富含在內),感謝drem補充!

    為網路開發者社会群众体育按1個讚!

    使用 SAXBuilder 建立 DOM 文件

    先是,营造 JDOM 的 SAXBuilder,SAXBuilder 能够在 constructor 内定解析器的類別名稱,作者們只要傳入 TagSoup 的解析器類別全名:org.ccil.cowan.tagsoup.Parser,就能够使用 TagSoup 進行解析:

    def builder =newSAXBuilder("org.ccil.cowan.tagsoup.Parser")
    

    创立好 SAXBuilder,就足以準備呼叫 build() 方法進行 HTML 解析,並建构 DOM 物件。

    雖然 SAXBuilder 提供了多個差异參數的 build() 方法,个中也有以 String systemId 為參數,能够一向傳入 uri 的本子,然则實際解析時,該方法卻是以系統預設編碼進行解析,而不會自動依據 HTML 文件钦点的編碼格式自動解析。在台灣,這表示將以 BIG伍編碼解析文件,倘使對象文件並非以 BIG5 編碼(這裡將以 http://news.google.com.tw/ 為例,該網頁是以 UTF-8 編碼。別誤會,這裡使用 谷歌(Google) News 首頁,並不代表該網站不适合 HTML 規範,而是因為 Google的服務具备特出的反應速度與穩定性,相信它能夠承受得起笔者們這些程式設計師的胡亂測試,…這應該算是對 谷歌 的偏重吧!),解析結果將是一批亂碼。因此,小编們必須使用 build(org.xml.sax.InputSource in) 這個版本,建立好 InputSouce 之後,設定正確的編碼格局,再傳入 SAXBuilder 的 build() 方法進行解析:

    defis=newInputSource("http://news.google.com.tw/")is.setEncoding(“UTF-8”)def doc = builder.build(is)
    

    這樣子,就得到了 DOM 物件。不過,這裡需注意的是,SAXBuilder 的 build() 方法,建设构造的 DOM 物件,是 org.jdom.Document ,若要求轉換為 org.w3c.dom.Document (譬如想要進一步使用 Java 標準 API 對該 DOM 文件進行處理時),則必須其它利用 org.jdom.output.DOMOutputter 進行轉換:

    org.w3c.dom.Document w3cdoc =newDOMOutputter().build( doc )
    

    同樣地,假使要將 JDOM 的 Document 輸出成 XML/XHTML ,則使用 org.jdom.output.XMLOutputter 進行轉換:

    String xhtml =new org.jdom.output.XMLOutputter().outputString( doc )
    

    恐怕直接輸出成檔案:

    new org.jdom.output.XMLOutputter().output( doc,newFileWriter("output.html"))
    

    進一步聯想,若寫的是: 購物商場、網路書城,若要讓 input 或 textarea 輸入框,能夠「立即、精準地觸發」,只要利用 HTML五 的 input 事件,則不必自个儿寫程式去投入 AJAX 作用,就能够輸鬆地達成须求。

    $('textarea').bind('input propertychange', function() {
        $('.msg').html($(this).val().length   ' characters');
    });
    

    www.68399.com 1

    資訊汲取

    Internet 上蘊藏著豐富的內容,供人們分享訊息、傳承知識。然则在 Semantic Web 普遍此前,除非資料來源網站主動提供資料存取 API,否則,要擷取既有 Internet 上的資訊,還是只可以從解析 HTML 著手。

    oninput、onchange 比較

      從下边表格能够看看,oninput 事件在 IE玖 以下版本不协理,须求运用 IE 特有的 onpropertychange 事件代表,這個事件在用戶分界面改變可能应用腳本直接修改內容兩種情況下都會觸發,有以下幾種情況:

    www.68399.com 2

    簡介

    正文將以實際範例介紹怎么样以 JDOM 搭配 TagSoup ,將 HTML 解析為 DOM 文件物件模型,並使用 X帕特h 汲取資訊,也许將文件輸出為 XHTML 格式。

    本文由68399皇家赌场发布于服务器租用,转载请注明出处:HTML 资源信息汲取(上篇) - 使用 JDOM 、 TagSoup

    关键词: 68399皇家赌场 HTML JavaScript JS/JQUERY

上一篇:npm install的时候报错 npm err code 一

下一篇:没有了