我有一个google脚本,可以在服务器上找到特定的.zip文件夹,提取文件,然后处理特定的.xml文件。我的问题是将此文件转换为正确的格式。
适用的代码段:
var dir = UrlFetchApp.fetch(url);
var b = dir.getBlob();
var files = Utilities.unzip(b);
var vesselDataBlob;
for (var i = 0; i < files.length; i++) {
if (files[i].getName().equals("dat/vesselDataMod.xml")) { //finds file with appropriate name
vesselDataBlob = files[i];
break;
}
}
var vesselData = vesselDataBlob.getDataAsString(); // Returns FULL document as a string.
var data = XmlService.parse(vesselData); // Throws error.
vesselData采用xml格式,vesselData.getContentType()
返回&#34; text / xml&#34;。
但是,我很难找到解析数据的方法。 XmlService.parse(vesselData)
会抛出错误:&#34; prolog中不允许使用内容。&#34;我尝试使用DOMParser,它也会抛出错误。我如何设置代码有什么问题吗?数据实际上不是xml格式吗?
大多数人可能做的和我的情况之间的明显区别是我从拉链文件夹中提取文件,而不是直接从网站上提取文件。这不是问题,我尝试使用上传到云端硬盘的xml文件,同样的问题就出现了。
我可以设置字符串操作来获取我需要的数据,但如果有人可以提供帮助,我宁愿不通过努力。谢谢!
我一直在使用这段xml进行调试:
<?xml version="1.0" encoding="UTF-8"?>
<vessel_data version="2.1">
<hullRace ID="0" name="TNS" keys="player">
<taunt immunity="Yadayada" text="More yadayada"/>
</hullRace>
</vessel_data>
答案 0 :(得分:1)
以下功能适用于我的一个非常简单的zip文件。我建议您尝试使用getDataAsString(&#34; UTF-8&#34;),看看是否能解决问题。
function test() {
var f = DriveApp.getFilesByName("ingest.zip").next();
var files = Utilities.unzip(f.getBlob());
for(var i=0; i<files.length; i++) {
var ff = files[i];
if (/\.xml$/.test(ff.getName())){
var s = XmlService.parse(ff.getDataAsString());
Logger.log(s);
s = XmlService.parse(ff.getDataAsString("UTF-8"));
Logger.log(s);
break;
}
}
}
答案 1 :(得分:0)
我将您的XML文件放入gist(作为XML,而不是zip)并解析。
function test2() {
var f = UrlFetchApp.fetch("...gisturl.../test.xml").getBlob(
);
var s = XmlService.parse(f.getDataAsString());
Logger.log(s.getDescendants().length);
}
不幸的是,我现在无法让Utilities.unzip()在上传到Google云端硬盘的zip文件上运行。希望其他用户能为您提供更好的解决方案。