2012-10-23 116 views
-1

是否有一個庫將HTML解析爲String對象,無論是Java,C#還是其他任何編程語言。將「簡單html」渲染爲字符串

這是我的情況:

我有一個來自一個所見即所得的編輯器,幷包含一些基本的HTML標記,如<p><br>和其他一些像這樣的文件:

<p>This &nbsp;</p><font>etc</font><br> 
<span> and this, etc. 

當出口到一些其他的工具它被轉換爲純文本使其不可讀。我現在正在做的是:「全選」>「另存爲x.html」>「在瀏覽器中打開」>「全選」>「粘貼」

我知道可以用程序自動化。

有沒有圖書館來做到這一點?也就是說,要「渲染」簡單的HTML?最好是一個字符串,我可以把它放到剪貼板中。刪除html標籤是不夠的,因爲我會得到一個很長的行,沒有回車。

+0

聽起來像你沒有渲染太多,想要剝離的HTML是正確的? – NotMe

+0

@ChrisLively這是正確的。我不知道要選擇什麼工作。 「渲染」是我能想到的最接近的,因爲我想保留\ n從
等。我更新了這個問題以澄清這一點。 – OscarRyz

+0

'c#'+'java' +'html' ='language-agnostic',因爲它們涵蓋了地球上大多數程序員? – kizzx2

回答

0

如果我得到它的權利,你想刪除所有的HTML標籤,這就是簡單的用C#:

var plainText = Regex.Replace(htmlString.Replace("<br>", Environment.NewLine).Replace("&nbsp;", " "), @"<[^>]*>", String.Empty); 
+0

那麼我想保留回車,以便我可以讀取它。否則我所擁有的是一個巨大的連續字符串 – OscarRyz

+0

我編輯了我的答案 –

+0

「這很簡單」,他說。現在它可能會像它一樣。(; –

1

對於Python,您可以使用實體引用來擴展this excellent function以執行您似乎需要的操作;

from HTMLParser import HTMLParser 
from htmlentitydefs import name2codepoint 

class MLStripper(HTMLParser): 
    def __init__(self): 
     self.reset() 
     self.fed = [] 
    def handle_data(self, d): 
     self.fed.append(d) 
    def handle_entityref(self, name): 
     self.fed.append(unichr(name2codepoint[name])) 
    def get_data(self): 
     return ''.join(self.fed) 

def strip_tags(html): 
    s = MLStripper() 
    s.feed(html) 
    return s.get_data() 

print strip_tags('<html>olle&lt;</br>') 
olle< 
+0

它與非ASCII的一些問題。?。字符串...閱讀文檔... – OscarRyz

0

有2種方式去它:

  1. 寫任意複雜的解析器清理數據。這是其他答案所建議的。如果你的投入不是很強硬,這往往是快勝。

  2. 但是,如果您有非常複雜的輸入並希望「高保真度」,則可以使用「真實」瀏覽器。

一個非常簡單的選擇是使用PhantomJS。下面是一個使用exampleinnerText從網頁中提取文本:

var page = require('webpage').create(); 
console.log('The default user agent is ' + page.settings.userAgent); 
page.settings.userAgent = 'SpecialAgent'; 
page.open('http://www.httpuseragent.org', function (status) { 
    if (status !== 'success') { 
     console.log('Unable to access network'); 
    } else { 
     var ua = page.evaluate(function() { 
      return document.getElementById('myagent').innerText; 
     }); 
     console.log(ua); 
    } 
    phantom.exit(); 
}); 

也有像WebBrowser class(MSIE)或GeckoFX選項。不過,我懷疑學習曲線會非常陡峭地沿着這些路徑走下去。