首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Google脚本解析(此) xml

如何使用Google脚本解析(此) xml
EN

Stack Overflow用户
提问于 2020-12-22 22:43:40
回答 1查看 191关注 0票数 0

我需要通过Google脚本解析这个xml。jsonformatter.org告诉我XML是有效的。

我想得到ICO的文本,但是//var ico = root.getChild('Ares_odpovedi').getChild('Odpoved').getChild('VBAS').getChild('ICO').getText();抛出了一个错误

完整的代码是

代码语言:javascript
运行
复制
function getARES() {
var url = 'https://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?'
    + 'ico=06018025'
    + '&xml=1';
var response = UrlFetchApp.fetch(url);

var responseText = response.getContentText(); //.replace(/D:/g,'');

var document = XmlService.parse(responseText);
var root = document.getRootElement();

var ico_tmp0 = root.getName();                 // value is "Ares_odpovedi"
var ico_tmp1 = root.getContentSize();          // value is 3         
var ico_tmp2 = root.getChild('Ares_odpovedi'); // value is null
var ico_tmp3 = root.getChild('Odpoved');       // value is null
//var ico = root.getChild('Ares_odpovedi').getChild('Odpoved').getChild('VBAS').getChild('ICO').getText();
//var ico = root.getChild('Odpoved').getChild('VBAS').getChild('ICO').getText();

Logger.log(response);
Logger.log(" ");
Logger.log(responseText);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-22 22:57:24

我相信你的目标如下。

  • 您希望使用Google脚本检索ICO文本。

在这种情况下,当使用getChild时,需要使用名称空间。当这反映到您的脚本中时,如下所示。

修改脚本:

代码语言:javascript
运行
复制
function getARES() {
  var url = 'https://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?'
      + 'ico=06018025'
      + '&xml=1';
  var response = UrlFetchApp.fetch(url);

  var responseText = response.getContentText(); //.replace(/D:/g,'');

  var document = XmlService.parse(responseText);
  var root = document.getRootElement();
  
  // I modified below script.
  var ns1 = XmlService.getNamespace("/ares/xml_doc/schemas/ares/ares_answer_basic/v_1.0.3");
  var ns2 = XmlService.getNamespace("/ares/xml_doc/schemas/ares/ares_datatypes/v_1.0.3");
  var res = root.getChild("Odpoved", ns1).getChild("VBAS", ns2).getChild("ICO", ns2).getText();
  Logger.log(res)
}
  • 当运行上述脚本时,将检索06018025
  • 当使用http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=27074358&xml=1作为UrlFetchApp.fetch的URL时,得到27074358

参考文献:

添加:

从你对Any idea why var res2 = root.getChild("Odpoved", ns1).getChild("VBAS", ns2).getChild("DIC", ns2).getText(); does not work?的回复中,我注意到你的问题已经改变了。

在您的问题中,您希望检索ICO的值。但是在检索DIC值的情况下,需要检查XML的结构。因为在您的问题中的脚本中,来自var url = 'https://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?' + 'ico=06018025' + '&xml=1';的XML不包含DIC的值。我认为这就是你提出问题的原因。

当您想从DIC检索http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=27074358&xml=1值时,请使用以下脚本。

修改脚本:

代码语言:javascript
运行
复制
function getARES() {
  var url = 'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=27074358&xml=1';  // <--- Modified
  var response = UrlFetchApp.fetch(url);
  var responseText = response.getContentText(); //.replace(/D:/g,'');
  var document = XmlService.parse(responseText);
  var root = document.getRootElement();
  var ns1 = XmlService.getNamespace("/ares/xml_doc/schemas/ares/ares_answer_basic/v_1.0.3");
  var ns2 = XmlService.getNamespace("/ares/xml_doc/schemas/ares/ares_datatypes/v_1.0.3");
  var res = root.getChild("Odpoved", ns1).getChild("VBAS", ns2).getChild("DIC", ns2).getText();  // <--- Modified
  Logger.log(res)  // In this case, CZ27074358 is retrieved.
}

注意:

关于名称空间,这些线程可能是有用的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65416776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档