2010-06-01 91 views
7

好吧我很茫然如何命名這個問題。我有一些HTML文件,可能是由Lucide上尉自己寫的,我需要解析。它由很多這樣的片段,其他html標籤中解析HTML「視覺」

<p>HeadingNumber</p> 
<p style="text-indent:number;margin-top:neg_num ">Heading Text</p> 
<p>Body</p> 

注意,標題編號和文字都在單獨的p標籤,在通過CSS水平線上。 css可能是Lucify的幻想,縮進,填充,邊距和位置的混合。

但是,該行是我業務模型中的單個對象,應該保持這樣。那麼如何檢測兩個p元素是否在一行中可視化並相應地處理它們。如果有幫助,我相信HTML文件格式良好。

+3

聽起來像一個「網絡瀏覽器」的工作:) – 2010-06-01 21:09:58

+1

你使用什麼語言? PHP的? java嗎? ... – laher 2010-06-01 21:10:10

+3

@這個問題:hahahahahahahaha。我真的爲你和這個要求感到難過。對不起的人:\ – Jason 2010-06-01 21:13:26

回答

2

你沒有指定你是如何解析的,但這在jQuery中是可能的,因爲你可以確定窗口原點中任何元素的偏移位置。 Check out the example here.

代碼:

$(function() { 

function sameHorizon(obj1, obj2, tolerance) { 

    var tolerance = tolerance || 0; 

    var obj1top = obj1.offset().top; 
    var obj2top = obj2.offset().top; 

    return (Math.abs(obj1top - obj2top) <= tolerance); 

} 

$('p').each(function(i,obj) { 
    if ($(obj).css('margin-top').replace('px','') < 0) { 
     var p1 = $(obj).prev('p'); 
     var p2 = $(obj); 
     var pTol = 4; // pixel tolerance within which elements considered aligned 

     if (sameHorizon(p1, p2, pTol)) { 
      // put what you want to do with these objects here 
      // I just highlighted them for example 
      p1.css('background','#cc0'); 
      p2.css('background','#c0c'); 

      // but you can manipulate their contents 
      console.log(p1.html(), p2.html()); 
     } 
    } 
}); 

​}); 

這個代碼是基於一個假設,如果一個<p>具有負margin-top然後嘗試與以前<p>排列,但如果你知道的jQuery應該顯然如何改變它以符合不同的標準。

如果你不能爲你的問題使用jQuery,那麼希望這對其他誰是或者你可以在jQuery中設置一些東西來解析這個並輸出新的標記是有用的。

0

你可能會碰到irobotsoft網站刮板和有一個測試:

  • 打開在其瀏覽器窗口
  • 選擇的頁面和標記線
  • 使用菜單:設計 - >實踐HTQL看看如果它可以提取該行。
0

我沒有很多使用它的經驗,但是如果HTML格式良好,並且取決於需要解析數據的格式,則可以將其視爲XML文檔並使用XQuery解析出你的數據。

同時在Firefox中打開HTML並查看是否可以弄清楚使用Firebug應用了哪些CSS樣式。它可能會給你一個更好的線索,看看HTML是如何排列起來的......雖然它看起來像使用'margin-top:negative_number'來完成......如果是這種情況,我認爲XQuery應該能夠找到應用了該特定樣式的元素。

+0

如果你認爲XQuery可能會有所幫助,你可以使用它在.NET中以及... http://www.4guysfromrolla.com/articles/071603 -1.2.aspx – 2010-06-03 03:55:31