Имя возвращаемого идентификатора XML скрипта листов Google - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь получить имя ID из XML-файла Goodreads. Я пытаюсь вернуть все идентификаторы названий полок и хотел бы вернуть его в одну строку с "," заменяя новые строки.

Это то, что у меня есть, но фалинг

function GetSHELVES(ID) {
 book = encodeURIComponent(ID);
  var url = 'https://www.goodreads.com/book/show/' + ID + '.xml?key=REDACTED';

  var response = UrlFetchApp.fetch(url).getContentText();

  var xml = XmlService.parse(response);

  var root = xml.getRootElement();

  var BookSHELVES = root
    .getChild('book')
    .getChild('popular_shelves')
    .getAttribute('shelf name')
    .getValue();

  Logger.log(BookSHELVES);
return BookSHELVES;
}

и вот образец листа xml

This XML file does not appear to have any style information associated with it. The document tree is shown below.

    <GoodreadsResponse>
    <Request>
    <authentication>true</authentication>
    <key>...</key>
    <method>
    <![CDATA[ book_show ]]>
    </method>
    </Request>
    <book>
    <popular_shelves>
    <shelf name="to-read" count="437"/>
    <shelf name="fantasy" count="31"/>
    <shelf name="audible" count="19"/>
    <shelf name="urban-fantasy" count="16"/>
    <shelf name="audiobook" count="15"/>
    <shelf name="audiobooks" count="12"/>
    <shelf name="audio-books" count="10"/>
    <shelf name="audio" count="9"/>
    <shelf name="alternate-history" count="7"/>
    </popular_shelves>
    </book>
    </GoodreadsResponse>

Любая помощь будет высоко ценится

1 Ответ

0 голосов
/ 30 октября 2018
  • Вы хотите проанализировать и получить результат, используя Google Apps Script.

Если мое понимание верно, как насчет этой модификации?

Очки модификации:

  • В вашем сценарии root.getChild("book").getChild("popular_shelves") является правильным. Но у popular_shelves есть несколько shelf. Таким образом, он извлекает все shelf, используя getChildren().
  • При вашем значении XML name="###" может быть получено с помощью getAttribute("name").getValue().

Модифицированный скрипт:

Пожалуйста, измените следующим образом и попробуйте снова.

От:
var BookSHELVES = root
  .getChild('book')
  .getChild('popular_shelves')
  .getAttribute('shelf name')
  .getValue();
Для того, чтобы:
var popularShelves = root.getChild("book").getChild("popular_shelves").getChildren();
var BookSHELVES = popularShelves.map(function(shelf) {return shelf.getAttribute("name").getValue()}).join(",");
Результат:
to-read,fantasy,audible,urban-fantasy,audiobook,audiobooks,audio-books,audio,alternate-history

Примечание:

  • Этот модифицированный скрипт предполагает, что response в вашем скрипте является значением XML в вашем вопросе.

Ссылки:

Если это не то, что вы хотите, извините.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...