2010-04-01 43 views
6

Tôi đang cố trích xuất các giá trị StateLongName và StateShortName từ xml dưới đây.Cách tìm/trích xuất dữ liệu từ xml bằng jQuery

Tôi biết phải có một cách đơn giản để làm điều này với jQuery.

<NewDataSet> 
    <Table> 
    <StateLongName>Alabama</StateLongName> 
    <StateShortName>AL</StateShortName> 
    </Table> 
    <Table> 
    <StateLongName>Alaska</StateLongName> 
    <StateShortName>AK</StateShortName> 
    </Table> 

...elments removed for brevity 

</NewDataSet> 

Đây là những gì tôi đã thử.

Tải xml từ phía trên vào tên biến Javascript xml.

Thử # 1

$(xml).find("TABLE").each(function() 
{ 
    var stateName = $(this).find("StateLongName").innerText; 
    var stateCode = $(this).find("StateShortName").innerText; 
}); 

Hãy thử # 1 không tìm thấy bất cứ điều gì và không bao giờ đi vào bên trong để nạp stateName và các biến stateCode.

Thử # 2

$(xml).find("StateLongName").each(function() 
{ 
    var stateName = $(this).find("StateLongName").innerText; 
    var stateCode = $(this).find("StateShortName").innerText; 
}); 

Thử # 2 không tìm thấy trận đấu, tuy nhiên stateName và stateCode còn lại không xác định.

Thử # 3

$(xml).find("StateLongName").each(function() 
{ 
    var stateName = $($(xml).find('StateLongName').parent()[0].innerHTML)[1].data; 
    var stateCode = $($(xml).find('StateLongName').parent()[0].innerHTML)[5].data; 
}); 

Thử # 3 công trình nhưng phải có một cách tốt hơn. Vui lòng làm sáng tỏ cho tôi.

Cảm ơn bạn đã dành thời gian!

+0

coi thường câu trả lời của tôi - Tôi nghĩ câu hỏi của bạn là tổng quát hơn! –

Trả lời

7

Đó là trường hợp nhạy cảm, sử dụng "Table" như thế này:

$(xml).find("Table").each(function() { 
    var stateName = $(this).find("StateLongName").text(); 
    var stateCode = $(this).find("StateShortName").text(); 
}); 

Cập nhật: Xin Lỗi này là một chút khó hiểu, không sử dụng <table>, nó đối xử với nó như html tạo ra một <tbody> và mọi thứ trở nên lạ từ đó :) Nếu bạn thay đổi nó để chỉ giáp bất cứ điều gì khác, nó sẽ làm việc, đây là một ví dụ với nó thay đổi để <tabl>: http://jsfiddle.net/Yvetc/

Dưới đây là một đầy đủ trần trang kiểm tra:

<html> 
    <head>  
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    <script type="text/javascript"> 
    var xml="<NewDataSet><Tabl><stateLongName>Alabama</stateLongName><stateShortName>AL</StateShortName></Tabl><Tabl><StateLongName>Alaska</StateLongName><StateShortName>AK</StateShortName></Tabl></NewDataSet>"; 
    $(xml).find("Tabl").each(function() { 
     var stateName = $(this).find("StateLongName").text(); 
     var stateCode = $(this).find("StateShortName").text(); 
     alert("State: " + stateName + " Code: " + stateCode); 
    }); 
    </script> 
    </head> 
    <body> 
    </body> 
</html> 
+0

Tôi muốn xác định 'var $ this = $ (this)' khi sử dụng giá trị đó nhiều lần. –

+0

Cảm ơn bạn đã trả lời nhanh Nick. Thật không may, thay đổi trường hợp vẫn không tìm thấy bất kỳ trận đấu nào. –

+0

Dường như độ nhạy trường hợp KHÔNG áp dụng cho phương thức .find(). Bất kỳ phiên bản trường hợp nào của $ (xml) .find ("statelongname") sẽ khớp, trong khi bất kỳ phiên bản ký tự nào của $ (xml) .find ("bảng") sẽ KHÔNG khớp. –

2
$.ajax({ 
      type: "GET", 
      url: "labels.xml", 
      dataType: "xml", 
      success: function(xml) { 
       $(xml).find('label').each(function(){ 
        var id_text = $(this).attr('id') 
        var name_text = $(this).find('name').text() 

        $('<li></li>') 
         .html(name_text + ' (' + id_text + ')') 
         .appendTo('#update-target ol'); 
       }); //close each(
      } 
     }); //close $.ajax(

mẫu xml cho việc này:

<?xml version="1.0" encoding="iso-8859-1"?> 


<labels> 
    <label id='ep' added="2003-06-10"> 
    <name>Ezra Pound</name> 
    <address> 
     <street>45 Usura Place</street> 
     <city>Hailey</city> 
     <province>ID</province> 
    </address> 
    </label> 
    <label id='tse' added="2003-06-20"> 
    <name>Thomas Eliot</name> 
    <address> 
     <street>3 Prufrock Lane</street> 
     <city>Stamford</city> 
     <province>CT</province> 
    </address> 
    </label> 
    <label id="lh" added="2004-11-01"> 
    <name>Langston Hughes</name> 
    <address> 
     <street>10 Bridge Tunnel</street> 
     <city>Harlem</city> 
     <province>NY</province> 
    </address> 
    </label> 
    <label id="co" added="2004-11-15"> 
    <name>Christopher Okigbo</name> 
    <address> 
     <street>7 Heaven's Gate</street> 
     <city>Idoto</city> 
     <province>Anambra</province> 
    </address> 
    </label> 
</labels> 
Các vấn đề liên quan