XML解析谷歌应用程序脚本

时间:2017-06-01 14:02:53

标签: xml google-apps-script

我在Google App Script中遇到了函数XmlService.parse的问题。我正在尝试创建脚本,我需要解析收件箱中的电子邮件。我试图发送几个具有此格式的测试电子邮件

<div dir="ltr">test 1<div><br></div></div>

但如果我使用这一行

var doc = XmlService.parse(messages[j].getBody());

我收到此错误

  

第1行出错:元素类型&#34; br&#34;必须由匹配的结束标记终止&#34;&#34;。 (第18行,文件&#34;代码&#34;)

什么是可识别的,因为只有信息。有没有解决方案如何解决这个问题?或者我必须用另一种方式解析它?提前谢谢。

编辑:我对img标签有同样的问题

  

错误发生:第38行出错:元素类型&#34; img&#34;必须由匹配的结束标记终止&#34;&#34;。

我需要解析红框email to parse

中的文字

在旧脚本中有一个函数

Xml.parse(messag.getBody(),true)

但是不推荐使用此功能。我试着用

XmlService.parse(messages.getBody());
我提到的

但是我得到了未配对的html标签的错误。我通过函数.getBody()得到的消息在这里getbody email

有人可以帮助我吗?再次感谢。

1 个答案:

答案 0 :(得分:3)

XmlService无法解析HTML。它只能解析Canonical XML。但是有节点JS的html解析库。因此,您可以使用其中一个模块通过browserify运行它,对生成的源进行一些小修改,并获得一个解析html的Apps脚本库。

  

https://github.com/fb55/htmlparser2

我生成的库:

  

1TLbGgQBCztnB0lOhcTYKg2UpXtpdDwocvfcx44w1tqFnHDJC5ZXy_BDo
  https://github.com/Spencer-Easton/Apps-Script-htmlparser2-library

从htmlparser2自述文件修改的示例代码:

function myFunction() {   
  var htmlparser = htmlparser2.init();
  var parser = new htmlparser.Parser({
    onopentag: function(name, attribs){
      if(name === "div"){
        Logger.log("found div");
      }
    },
    ontext: function(text){
      Logger.log("-->" + text);
    },
    onclosetag: function(tagname){
      if(tagname === "div"){
        Logger.log("End Div");
      }
    }
  }, {decodeEntities: true});
  parser.write('<div dir="ltr">test 1<div><br></div></div>');
  parser.end();  
}