В JavaScript это решение выполнит эту работу:
function strip(html)
{
var tmp = document.createElement("DIV");
tmp.innerHTML = html;
return tmp.textContent || tmp.innerText || "";
}
Однако, насколько мне известно, документ недоступен в Google Apps Script. Есть ли другая альтернатива анализу и отображению простого текста из html в скрипте Google Apps?
Я пытался использовать
HtmlService.createHtmlOutput('<b>Hello, world!</b>').getContent();
Однако это просто отображает текст со всеми тегами.
Я ожидаю, что вклад
'<b>Hello, world!</b>'
Будет ли вывод
'Hello, world!'





HTML-теги можно удалить двумя способами:
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)
}
Другой способ сделать это, который приведен только в качестве учебного примера, — проанализировать HTML как Xml с помощью XmlService, а затем пройтись по всем элементам.
Следующий код проходит только через пару слоев дочерних элементов.
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")
}
«Содержимое не разрешено в прологе». Ошибка связана с тем, что первая часть содержимого: «Это всего лишь тест» не заключена в начальный и конечный теги. Вы также должны заменить все теги <br>, потому что у них нет завершающего тега: html = "<div>" + html + "</div>"; html = html.replace(/<br>/g,"");Logger.log("html:" + html) Вам нужно сделать еще кое-что, но это только начало. Возможно, вы захотите обновить исходный вопрос, добавив тестовый код.
XmlService.getPrettyFormat() может быть проще.
Я только что попробовал var output = XmlService.getPrettyFormat().format(document);Logger.log(output);, но он не удаляет теги HTML, о чем и был задан вопрос. Но это отличный способ убрать отступы и отформатировать разрывы строк. Есть ли лучший способ удалить теги html?
Понимаю. Я сначала не тестил. После тестирования я думаю, что мы можем использовать регулярное выражение: Logger.log(output.replace(/<[^>]*>/g,"")); после формата
Я обновил ответ кодом, в котором используется комбинация XmlService и регулярного выражения.
Я получаю «Содержимое не разрешено в прологе». когда я пробую это с html, который содержит упорядоченный список. function ParseHtml() { var html = 'Это всего лишь тест<br><br>Вот мой список<br><ol><li>один</li><li>два</li><li>три </li></ol><br>Аи маркированный<br><ul><li>Первый маркер</li><li>Пучок второй</li><li>Третий маркер</li> </ul>'; var document = XmlService.parse(html);//Создает документ XML var root = document.getRootElement();//Получает узел корневого элемента документа var text = root.getText();//Получает текстовое значение элемента узел элемента Logger.log('текст: ' + текст) }