Javascript GAS:解析XML-解码HTML实体名称失败-解码实体十进制代码成功
使用Google Apps脚本,我想解码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 & text <br/> ¢'; var xml = XmlService.parse('<d>' + str + '<
一些文本&;文本
¢代码>
存储为:
Some text & text
¢
因此,类似的问题如下:
作为新问题发布,因为使用HTML实体名称时答案不起作用,并且支持的GAS服务已更改
我使用:
var str = 'Some text & text <br/> ¢';
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ä</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(已解码)
返回解码
}