【发布时间】:2020-04-14 19:41:42
【问题描述】:
我已经到处寻找答案,但似乎找不到。我正在尝试更改查找站点地图 URL 和更新日期以接受一系列输入的自定义函数。
这是当前有效的功能:
function sitemap(sitemapUrl, namespace) {
var array = [];
var xml = UrlFetchApp.fetch(sitemapUrl).getContentText();
var document = XmlService.parse(xml);
var root = document.getRootElement();
var sitemapNameSpace = XmlService.getNamespace("http://www.sitemaps.org/schemas/sitemap/0.9");
var urls = root.getChildren('url', sitemapNameSpace);
for (var i = 0; i < urls.length; i++) {
var loc = urls[i].getChild('loc', sitemapNameSpace).getText();
var lastmod = urls[i].getChild('lastmod', sitemapNameSpace).getText();
array.push([loc, lastmod]);
}
return array;
}
我尝试使用下面的 Google 示例,但似乎不起作用,但我将其合并到我的函数中。有什么想法吗?
function DOUBLE(input) {
if (input.map) { // Test whether input is an array.
return input.map(DOUBLE); // Recurse over array if so.
} else {
return input * 2;
}
}
编辑:这就是我尝试将 Google 的示例用于我的功能的方式:
function sitemaps(sitemapUrl) {
var array = [];
var xml = UrlFetchApp.fetch(sitemapUrl).getContentText();
var document = XmlService.parse(xml);
var root = document.getRootElement()
var sitemapNameSpace = XmlService.getNamespace("http://www.sitemaps.org/schemas/sitemap/0.9")
var urls = root.getChildren('url', sitemapNameSpace)
for (var i = 0; i < urls.length; i++) {
var loc = urls[i].getChild('loc',sitemapNameSpace).getText();
var lastmod = urls[i].getChild('lastmod',sitemapNameSpace).getText();
array.push([loc, lastmod]);
}
if (sitemapUrl.map) {
return sitemapUrl.map(sitemaps);
} else {
return array
}
【问题讨论】:
-
谷歌的例子不起作用是什么意思?你能分享你的床单吗?我自己试过了,效果很好。在您的主要功能中,您有两个输入变量,但从不使用第二个,
namespace为什么会这样? -
我在上面的函数中包含了我如何使用 Google 的示例。第二个是可编辑的,但我在函数中设置了它,所以它实际上是不必要的。
-
请提供一个工作表示例,其中包含您将拥有的输入示例以及您希望输出看起来如何的示例。不知道你想得到什么类型的输出。
-
这里是所需输入和输出示例的链接 - 感谢您的帮助! docs.google.com/spreadsheets/d/…
-
谢谢,这更有意义,现在我已经修改并使用您的数据进行了测试。我已经编辑了我的答案,包括使用
flat来创建一个列表。
标签: javascript google-sheets custom-function