在JavaScript中,这个解决方案可以完成这项工作:
function strip(html)
{
var tmp = document.createElement("DIV");
tmp.innerHTML = html;
return tmp.textContent || tmp.innerText || "";
}
但是,据我所知,Google Apps Script中没有文档。有没有另一种替代方法可以在Google Apps Script中解析和显示来自html的纯文本?
我试过使用
HtmlService.createHtmlOutput('<b>Hello, world!</b>').getContent();
但是,这仅显示带有所有标签的文本。
我的期望是输入
'<b>Hello, world!</b>'
将输出
'Hello, world!'
可以通过两种不同的方式删除 html 标记:
- Reg Exp - 正则表达式
- 将 HTML 转换为 XML,并使用 XmlService 获取每个元素,然后获取每个元素的值
Reg Exp 更好,因为您不需要找到每个 HTML 元素,这需要更多的代码。
必须首先将 HTML 转换为 XML,以便可以使用XmlService.getPrettyFormat()
。 如果首先使用正则表达式删除 html 标记,则代码将不知道换行符应该在哪里。
使用XmlService.getPrettyFormat()
将使用换行符格式化 html。 但是要使用 XmlService,必须先将 html 字符串转换为 XML。 在将 html 字符串转换为 XML 时,您需要做几件事以避免错误。
function parseHtml() {
var html = 'This is just a Test<br><br>Here is my List<br>
<ol><li>one</li><li>Two</li><li>Three</li></ol><br>And a bulleted one<br><ul>
<li>Bullet One</li><li>Bullet Two</li><li>Bullet Three</li></ul>';
html = '<div>' + html + '</div>';//To avoid the "Content is not allowed in prolog." error
html = html.replace(/<br>/g,"");//To avoid an error when parsing to xml
//Logger.log('html: ' + html)
var document = XmlService.parse(html);
var output = XmlService.getPrettyFormat().format(document);
//Logger.log(output);
output = output.replace(/<[^>]*>/g,"");
Logger.log(output)
}
另一种方法(仅作为学习示例提供)是使用XmlService
将 HTML 解析为 Xml,然后遍历所有元素。 以下代码仅通过几层子级向下。
function parseHtml() {
var html = 'This is just a Test<br><br>Here is my List<br>
<ol><li>one</li><li>Two</li><li>Three</li></ol><br>And a bulleted one<br><ul>
<li>Bullet One</li><li>Bullet Two</li><li>Bullet Three</li></ul>';
html = '<div>' + html + '</div>';
html = html.replace(/<br>/g,"");
//Logger.log('html: ' + html)
var allText = "";
var thisTxt;
var document = XmlService.parse(html);
var root = document.getRootElement();
//Logger.log('root: ' + JSON.stringify(root))
var content = root.getAllContent();
//Logger.log('content: ' + JSON.stringify(content))
var L = content.length;
for (var i=0;i<L;i++) {
var thisEl = content[i];
if (!thisEl) {continue;}
var theType = thisEl.getType();
//Logger.log('theType: ' + theType)
//Logger.log('typeof theType: ' + typeof theType)
if (theType === theType.ELEMENT) {
var asElmt = thisEl.asElement();
var allChildren = asElmt.getChildren();
if (allChildren) {
var nmbrOfChildren = allChildren.length;
//Logger.log('nmbrOfChildren: ' + nmbrOfChildren)
}
if (!nmbrOfChildren) {
thisTxt = asElmt.getValue();
//Logger.log('thisTxt 43: ' + thisTxt)
allText = allText + thisTxt + "n";
continue;
}
for (var j=0;j<nmbrOfChildren;j++) {
thisTxt = allChildren[j].getValue();
if (!thisTxt) {
continue;
}
allText = allText + thisTxt + "n";
}
continue;
}
//Logger.log(thisEl.getValue())
allText = allText + thisEl.getValue() + "n";
}
//Logger.log('allText: ' + allText + "n")
}
首先,您需要创建一个临时的Google Doc并获取其docid
然后,您需要启用云端硬盘 API 高级服务。
然后使用以下代码:
function htmltotext() {
var html = 'Your <b>HTML</b> code here';
var blob = HtmlService.createHtmlOutput(html).getBlob();
var docid = 'Your doc id here';
Drive.Files.update('',docid,blob);
var doc = DocumentApp.openById(docid);
var text = doc.getBody().getText();
doc.saveAndClose();
Logger.log(text);
return text;
}