Qiita の使い方の勉強・練習含め、メモを投稿します。
提示情報不足な部分があるかもしれませんが、
どうぞご了承くださいませ。。
ブラッシュアップしていきます。
amazon APIを使ってXMLを取得した後、
データを整理したくてXMLから各要素を抽出することになりました。
Amazonは、一度に10個のデータを取得できます。
XMLの回答にはが複数あるので、その要素を連想配列で取得したいと思います。
function getDatafromXML(xmlData){
data = [];
var element = xmlData.getElement();
var item = element.getElement("Items").getElements("Item");
for(var i = 0; i <item.length;i++){
data[i] = item.getElement("ItemAttributes").getElement("ListPrice").getElement("Amount").getText();
}
return data;
}
function getPrice(){
var price = [];
price = getDatafromXML(xmlData);
Logger.log(price);
}
これで実行したところ、[nullの要素をgetElementできません」
とエラーが返ってきてしまいました。
どうやらAmazonのレスポンスの中には、存在したりしなかったりする要素があるので、getElementで取得する前に、その要素があるのかを判定する必要あります。
以下のようにif文で判定しようとしましたが、まだうまく行きません。
if(item.getElement("ItemAttributes").getElement("ListPrice").getElement("Amount"){
data[i] = item.getElement("ItemAttributes").getElement("ListPrice").getElement("Amount").getText();
}
function getPrice(){
var price = [];
price = getDatafromXML(xmlData);
Logger.log(price);
}
ifの条件文は、1要素ずつしかできないようなので、以下に修正
完成版
function getObjfromXML(xmlData){
var obj = {};
var element = xmlData.getElement();
var items = element.getElement("Items").getElements("Item");
for(var i = 0; i <item.length;i++){
if(items[i].getElement("ItemAttributes")){
if(items[i].getElement("ItemAttributes").getElement("ListPrice")){
if(items[i].getElement("ItemAttributes").getElement("ListPrice").getElement("Amount")){
obj["price"] = items[i].getElement("ItemAttributes").getElement("ListPrice").getElement("Amount").getText();}
}
}
}
return obj;
}
function getPrice(){
var price = [];
price = getDatafromXML(xmlData);
Logger.log(price);
}
実行結果
これでうまくXMLのElementを取得出来ました。