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

how to parse (this) xml using Google Script

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

我想获取 ICO 的文本,但 //var ico = root.getChild('Ares_odpovedi').getChild('Odpoved').getChild('VBAS').getChild('ICO').getText(); 出现错误

完整代码为

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);
}

我相信你的目标如下。

  • 您想使用 Google Apps 脚本检索 ICO 的文本。

在这种情况下,在使用getChild时需要使用名称space。当这反映到您的脚本中时,它会变成如下。

修改后的脚本:

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 的值。我认为这就是您遇到问题的原因。

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

修改后的脚本:

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.
}

注:

关于名字 space,这些帖子可能会有用。

  • What are XML namespaces for?