Javascript GAS:解析XML-解码HTML实体名称失败-解码实体十进制代码成功

Javascript GAS:解析XML-解码HTML实体名称失败-解码实体十进制代码成功,javascript,google-apps-script,html-entities,Javascript,Google Apps Script,Html Entities,使用Google Apps脚本,我想解码HTML,例如: 一些文本&;文本¢ 存储为: Some text & text ¢ 因此,类似的问题如下: 作为新问题发布,因为使用HTML实体名称时答案不起作用,并且支持的GAS服务已更改 我使用: var str = 'Some text &#x26; text <br/> &cent;'; var xml = XmlService.parse('<d>' + str + '<

使用Google Apps脚本,我想解码HTML,例如:

一些文本&;文本
¢

存储为:

Some text & text 
¢
因此,类似的问题如下:

作为新问题发布,因为使用HTML实体名称时答案不起作用,并且支持的GAS服务已更改

我使用:

var str = 'Some text &#x26; text <br/> &cent;';
var xml = XmlService.parse('<d>' + str + '</d>');
var strDecoded = xml.getRootElement().getText();
Logger.log(strDecoded);
var str='Some text&;文本
¢; var xml=XmlService.parse(“”+str+“”); var strDecoded=xml.getRootElement().getText(); Logger.log(标准编码);
解析时出现GAS错误消息:

TypeError:引用了实体“cent”,但未声明

我使用的是
¢作为一个例子,我测试了其他几个,结果都是一样的

当我使用实体十进制代码而不是实体十进制代码时,它可以正常工作(在本例中:
&162;
而不是
¢;
)。旧的煤气服务也有同样的效果


任何能够在GAS中解析上述HTML的解决方案都值得赞赏。这似乎是一个已知问题:

为避免此错误,您可以将doctype前置到字符串,但请注意,这将过滤掉HTML实体:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html>H&auml;</html>
Hä;

解决办法仍然是受欢迎的。目前,我在解析之前手动将一些常用的HTML实体名称转换为十进制等效名称。

您可以在xml文档的开头显式声明它们:


]>

这是一个老问题,但我设法用这种方法解决了它

function cleanHTML(html){
  var decoded = '';
  var xml = XmlService
  .parse('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html>' + html + '</html>')
  .getRootElement()
  .getChildren().forEach(function(el){
    decoded+=el.getValue();
  });
  //Logger.log(decoded)
  return decoded
}
函数清除html(html){
var解码=“”;
var xml=XmlService
.parse(“”+html+“”)
.getRootElement()
.getChildren().forEach(函数(el){
解码+=el.getValue();
});
//Logger.log(已解码)
返回解码
}