Извлечение данных из XML-файла Google Sheet с помощью AJAX

#ajax #xml #google-sheets #get

#ajax #xml #google-sheets #получить

Вопрос:

Я относительно новичок в работе с XML-файлами из Google Sheets, и у меня есть XML-файл, созданный из Google Sheet, из которого я хочу взять данные и отобразить их в таблице. XML-файл, который генерирует Google Sheets, отображает каждую запись следующим образом:

 <entry>
    <id>https://spreadsheets.google.com/feeds/list<MyID>/2/public/values/cokwr</id>
    <updated>2020-09-08T10:27:43.003Z</updated>
    <category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/>
    <title type='text'>1</title>
    <content type='text'>name: Joe Bloggs, totalpoints: 0</content>
    <link rel='self' type='application/atom xml' href='https://spreadsheets.google.com/feeds/list/<MyID>/2/public/values/cokwr'/>
    <gsx:pos>1</gsx:pos>
    <gsx:name>Joe Bloggs</gsx:name>
    <gsx:totalpoints>0</gsx:totalpoints>
</entry>
  

И мой HTML-файл выглядит следующим образом:

 <body>
  <table id = "league_data">
  <tr><th>Pos</th><th>Name</th><th>Points</th>
  </tr>
  </table>

  <script>
     $(document).ready(function(){
           $.ajax({
               type: "GET",
               url: "https://spreadsheets.google.com/feeds/list/<MyID>/2/public/values",
               dataType: "html",
               success: function(xml){
                 console.log("here");$
                   $(xml).find('entry').each(function(){
                       var Pos = $(this).find('gsx:name').text();
                       var Name = $(this).find('gsx:name').text();
                       var Points = $(this).find('gsx:totalpoints').text();
                       $('<tr></tr>').html('<th>'  Pos  '</th><td>$'  Name  '</td><td>$'  Points  '</td>').appendTo('#league_data');
                   });
               }
           });
   });
  </script>

</body>  

Возможно ли извлечь данные, заключенные в теги gsx: pos, gsx:name и gsx: totalpoints? Похоже, что мой код не работает при использовании этих тегов. Любая помощь была бы отличной.

Ответ №1:

Решение

Вам нужно будет проанализировать XML как DOM, чтобы получить доступ к таким именам тегов.

Вот пример для вашего случая без jQuery:

 // inside the success callback
const parser = new DOMParser();
let xmlDom = parser.parseFromString(xml, 'text/xml');
let Pos = xmlDom.getElementsByTagName('gsx:pos')[0].textContent;
let Name = xmlDom.getElementsByTagName('gsx:name')[0].textContent;
let Points = xmlDom.getElementsByTagName('gsx:totalPoints')[0].textContent;
$('<tr></tr>').html('<th>'  Pos  '</th><td>$'  Name  '</td><td>$'  Points  '</td>').appendTo('#league_data');
// ...
  

Ссылка

DOMParser