2016-09-15 3 views
0

Ich habe ein Problem beim Lesen von XML aus jQuery. Ich kann die XML laden, aber ich kann nicht seine Tags lesen, wollte ich den „menuitem“ zuerst lesen und dann seine Attribute lesen, meinen Code:Lesen von XML mit jQuery funktioniert nicht

$.ajax({ 
     type: "GET", 
     contentType: "application/json; charset=utf-8", 
     cache: false, 
     url: baseUrl + "/sitefinity/services/tafesa/TAFEpagedata.svc/Mainmenu", 
     data: {}, 
     dataType: 'xml', 
     success: function (data, textStatus, jqXHR) { 

     console.log(data); 

      $(data).find('menuitem').each(function() { 

         htmlString = htmlString + writeToplevelNav($(this).attr('title'), $(this).attr('url'),$(this)); 
      }); 

Und das ist mein XML:

<GetMainNavResponse xmlns="http://tempuri.org/"> 
    <GetMainNavResult> 
     <mainMenu> 
      <mainitem title="Courses" url="~/courses"> 
       <subitem title="Primary Industries @amp; Science" url="~/courses/primary-ind-science"> 
        <item title="Agriculture" url="~/courses/primary-ind-science/agriculture"/> 
        <item title="Animal Care @amp; Veterinary Nursing" url="~/courses/primary-ind-science/animal-care-veterinary-nursing"/> 
        <item title="Aquaculture" url="~/courses/primary-ind-science/aquaculture"/> 
        <item title="Conservation @amp; Land Management" url="~/courses/primary-ind-science/conservation-land-management"/> 
        <item title="Horticulture" url="~/courses/primary-ind-science/horticulture"/> 
        <item title="Science" url="~/courses/primary-ind-science/laboratory-technology"/> 
       </subitem> 
      </mainitem> 
     </mainMenu> 
    </GetMainNavResult> 
</GetMainNavResponse> 

Kann mir jemand dabei helfen, vielen Dank!

Antwort

0

Problem ist, gibt es kein Element menuitem im xml genannt Sie auf dem Laufenden, wenn Sie Ihren Code ändern:

$(data).find('mainitem') 

Sie werden das erste Element erhalten, die Titel Kurse und URL ~/Kurse ist

anschließend für das mainMenu mainitem würde ich denken Sie, dass es Subitems auch über bekommen würde wollen:

$(data).find('mainitem').each(function() { 
    $(this).find('subitem').each(function() { 
     // Do some processing with subitem 
    }); 

    // Do some processing with mainitem as well 
}); 

Und dann die Subitems Artikel:

$(data).find('mainitem').each(function() { 
    $(this).find('subitem').each(function() { 

     $(this).find('item').each(function() { 
      // Process subitem's items 
     }); 

     // Do some processing with subitem as well 
    }); 

    // Do some processing with mainitem as well 
}); 

Ich habe ein GitHub Projekt hier mit einer Lösung zeigt diese Technik erstellt: https://github.com/davethomas11/stackoverflow_Q_39502601

Hosted Beispiel: https://www.daveanthonythomas.com/remote/so39502601/

+0

Hallo Dave, Danke für die schnelle Lösung. Ja, ich habe fälschlicherweise einen anderen Namen angegeben, und das war nicht das Problem, wenn ich die URL ersetzen: baseUrl + "/sitefinity/services/tafesa/TAFEpagedata.svc/Mainmenu" mit der URL des physischen Standorts wie "url: baseUrl +"/sitefinity/services/tafesa/menu.xml "," Es funktioniert. Ich muss dies mit meinem Back-End-Dev überprüfen. Schätzen Sie Ihre Antwort und nach meiner Anfrage ist es richtig! – NPN