Как я могу получить доступ к дочерним атрибутам в xml, используя javascript или jQuery? - PullRequest
0 голосов
/ 28 июня 2018

Я новичок в разработке кода и пытаюсь создать проект, который поможет мне сохранить полученные навыки. При этом я попал в ловушку.

Я пытаюсь получить пару атрибутов из узлов в файле XML, но не могу найти то, что мне нужно. Мне нужно иметь возможность извлечь «число» из родительского узла и «код» команды для каждой команды, указанной в узле. Количество команд колеблется между 2 и 6. Вот пример XML.

Мой код указан ниже. Когда он запускается, он получает данные за неделю, но не загружает команды. У нескольких постов, которые я прочитал, была похожая проблема, но с какой-то другой технологией или структурой данных, которые не относились к тому, с чем я здесь работаю (насколько я могу судить). Любая помощь будет оценена.

    <!DOCTYPE html>
<html>
    <head>
        <title>Bye Week</title>
        <script>
            var xmlhttp;

            window.onload = function()
            {
                 var url = "https://www.fantasyfootballnerd.com/service/byes/xml/test/";
                 xmlhttp = new XMLHttpRequest();
                 xmlhttp.open("GET", url, true);
                 xmlhttp.onreadystatechange = byeWeeks;
                 xmlhttp.send();
            }

            function byeWeeks()
            {
                if(xmlhttp.readyState==4 && xmlhttp.status==200)
                {
                    var theXML = xmlhttp.responseXML.documentElement.getElementsByTagName('Week');
                    for(var i = 0; i < theXML.length; i++)
                    {
                        var week = theXML[i].getAttribute('number');
                        var team = theXML[i].getElementsByTagName('Team');


                        var out = "<b>" + team + "</b><br/>";
                        out += "Bye Week: " + week + "<br/>";


                        console.group('Output for ' + team);
                        console.log('Bye Week: ' + week);
                        console.log();
                        console.groupEnd();

                        document.getElementById('result').innerHTML += out
                    }
                }
            }
        </script>

    </head>
    <body>
        <div id="result"></div>
    </body>
</html>

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Я не знаком с фэнтезийным футболом, но я предполагаю, что каждую неделю есть две команды, которые вы хотите получить. Чтобы получить доступ к атрибутам дочернего элемента на неделю, попробуйте:

var team1Name = theXML[i].childNodes[0].getAttribute("name");
var team2Name = theXML[i].childNodes[1].getAttribute("name");

team1Name должно быть «вашингтон краснокожих» team2Name должен держать "Флоридские пантеры"

если вы хотите ввести код команды, просто замените «имя» на «код»

если вы не уверены, сколько команд должно работать, следующий код должен работать

var teams = [];
for each (team in theXML[i].childNodes){
    teams.push(team.getAttribute("name"));
} 
//at this point teams will hold an array of team names playing that week
0 голосов
/ 29 июня 2018

@ Ашиш Хандельвал Вот обновленный код с массивом, на который я ссылался ранее (я пытался опубликовать его как комментарий к нашей строке разговора, но он был слишком длинным). XML можно найти здесь.

<!DOCTYPE html>
<html>
    <head>
            <title>Bye Week</title>
        <script>
            var xmlhttp;

            window.onload = function()
            {
                 var url = "https://www.fantasyfootballnerd.com/service/byes/xml/test/";
                 xmlhttp = new XMLHttpRequest();
                 xmlhttp.open("GET", url, true);
                 xmlhttp.onreadystatechange = byeWeeks;
                 xmlhttp.send();
            }

            function byeWeeks()
            {
                if(xmlhttp.readyState==4 && xmlhttp.status==200)
                {
                    var theXML = xmlhttp.responseXML.documentElement.getElementsByTagName('Week');
                    for(var i = 0; i < theXML.length; i++)
                    {
                        var week = theXML[i].getAttribute('number');
                        var teams = theXML[i].getElementsByTagName('Team');
                        Array.from(teams).forEach(function(team) {
                            console.log(team.getAttribute('code'));
                            });

                        console.group('Output for ' + team);
                        console.log('Bye Week: ' + week);
                        console.log(theXML[i]);
                        console.log(teams.push(team.getAttribute("code")));
                        console.groupEnd();

                        document.getElementById('result').innerHTML += out
                    }
                }
            }
        </script>

    </head>
    <body>
        <div id="result"></div>
    </body>
</html>
0 голосов
/ 28 июня 2018

В соответствии с прикрепленной структурой xml, кажется, что узел team может быть кратным внутри узла week, поэтому вам придется перебирать узлы team, чтобы извлечь code.

var week = theXML[i].getAttribute('number');
var teams = theXML[i].getElementsByTagName('Team');
teams.forEach(function(team) {
  console.log(team.getAttribute('code'));
});
...