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を取得出来ました。