2012-10-23 119 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选项。不过,我怀疑学习曲线会非常陡峭地沿着这些路径走下去。