首页 > 解决方案 > 如何修复我的 ajax 解析器,使其显示我想要显示的所有节点

问题描述

我一直在尝试将这个 xml 数据处理成 div 我已经将它管理到一定程度,但它只会显示第一个值,不确定为什么,并且任何帮助都会得到很大的帮助

我已经按照一些教程从 XML 文件中提取数据,但无法显示一个值

<!DOCTYPE html>
<html>
    <head>
        <title>Movies</title>
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
        <script type="text/javascript">
        $.ajax({
        type: "GET",
        url: "movies.xml",
        dataType: "xml",
        success: function(data) {
            $(data).find('dates').each(function() {
                var movies = $(this).find('film').attr('name');
                var time = $(this).find('session').attr('time');

             $('.container').append( movies + ' <br> ' + time );

        })
    },
        error: function() {
            $('.container').text('Failed to get feed');
        }
    });

        </script>           

    </head>
    <body>

        <div class="container">

        </div>


    </body>
</html>         


<?xml version="1.0" ?>
<!-- Version 8.216 (Build 8216) -->
<!-- INTERNET FTP Sessions (Extended - Sort By Date) -->
<!-- Sessions for 3 February 2019-->

<ROOT guid="{E8AFA1E2-B92A-4590-8049-50EE083899B0}" versionNo="8216" releaseNo="45577" dateCreated="3 February 2019" timeCreated="12:16 pm" dateFrom="3 February 2019" dateTo="3 February 2019" >
<site siteNo="9200" siteName="Starlight Cinema Centre" timeFormat="h:mm am/pm" >
<movies>
<cinemas>
    <cinema cinemaNo="1" name="CINEMA 1" cinemaID="1" cinemaTypeNo="0" />
    <cinema cinemaNo="2" name="CINEMA 2" cinemaID="2" cinemaTypeNo="0" />
    <cinema cinemaNo="3" name="CINEMA 3" cinemaID="3" cinemaTypeNo="0" />
    <cinema cinemaNo="4" name="CINEMA 4" cinemaID="4" cinemaTypeNo="0" />
    <cinema cinemaNo="5" name="CINEMA 5" cinemaID="5" cinemaTypeNo="0" />
    <cinema cinemaNo="6" name="The Lounge" cinemaID="6" cinemaTypeNo="1" />
</cinemas>
<dates>
    <date  asInteger="20190203" asText="3 February 2019">
    <film filmNo="3326" name="AQUAMAN (LD)" duration="2 hrs 40 mins" rating="M" >
    <cinemaType cinemaTypeNo="0" name="Cinema" >
        <sessions  filmNo="3326">
        <session time="1:15 pm" cinemaNo="5" />
                <session time="6:40 pm" cinemaNo="5" />
        </sessions>
    </cinemaType>
    </film>
    <film filmNo="3337" name="DRAGON BALL SUPER: BROLY" duration="2 hrs" rating="PG" >
    <cinemaType cinemaTypeNo="0" name="Cinema" >
        <sessions  filmNo="3337">
        <session time="1:40 pm" cinemaNo="1" />
        <session time="6:40 pm" cinemaNo="5" />
        </sessions>
    </cinemaType>
    </film>
    <film filmNo="3334" name="GLASS (LD)" duration="2 hrs 25 mins" rating="M" >
    <cinemaType cinemaTypeNo="0" name="Cinema" >
        <sessions  filmNo="3334">
        <session time="11:00 am" cinemaNo="1" />
        <session time="6:20 pm" cinemaNo="3" />
        </sessions>
    </cinemaType>
    </film>
    </date>
</dates>
</movies>
</site>
</ROOT>
<!-- End File -->

需要它来显示所有电影和时间,但它只显示一个像它只显示 AQUAMAN (LD) 下午 1:15

谢谢你的帮助

标签: phpajaxxml

解决方案


你只有一个dates元素,所以你的循环只执行一次。您真正想要做的是迭代film元素:

success: function(data) {
    $(data).find('film').each(function() {
        var movies = $(this).attr('name');
        var time = $(this).find('session').attr('time');
        $('.container').append( movies + ' <br> ' + time );
    })
},

如果要显示按日期分组的电影,则需要有一个嵌套循环,例如:

success: function(data) {
    $(data).find('date').each(function() {
        var date = $(this).attr('asText');
        $('.container').append(date + '<br>');
        $(this).find('film').each(function() {
            var movies = $(this).attr('name');
            $('.container').append( movies + ' <br> ' );
            $(this).find('session').each(function () {
                 var time = $(this).attr('time');
                 $('.container').append( time + ' <br> '  );
            })
        })
    })
},

推荐阅读