是否有使用Google Apps Script将html字符串转换为没有html标记的纯文本的功能或示例?



在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 标记:

  1. Reg Exp - 正则表达式
  2. 将 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;
}

最新更新