2012-02-10 27 views
12

Tôi đang phát triển một ứng dụng HTML5.Phân tích cú pháp jQuery XML: nhận phần tử có thuộc tính cụ thể

Tôi muốn phân tích một XML như thế này:

<?xml version="1.0" encoding="utf-8" ?> 
    <cards> 
     ... 
     <card id="3"> 
      <name lang="es"></name> 
      <description lang="es"></description> 
      <name lang="en"></name> 
      <description lang="en"></description> 
     </card> 
     ... 
    </cards> 

Tôi muốn có được tên và mô tả rằng có thuộc tính lang = "en".

Tôi bắt đầu viết mã, nhưng tôi không biết làm thế nào để hoàn thành nó:

function loadCards(lang) 
{ 
    $.ajax({ 
     type: "GET", 
     url: 'data/english.xml', 
     dataType: "xml", 
     success:parseCardsXml 
    }); 
} 

function parseCardsXml(xml) 
{ 
    $(xml).find('Card').each(function() 
    { 
     var id = $(this).attr('id'); 
     var name = $(this).find('name'); 
    } 
} 

Bằng cách này, loadCards chức năng có một cuộc tranh cãi (hoặc tham số) gọi lang.

Làm cách nào để chuyển đối số này tới function parserCardsXml(xml)? Tôi làm cách nào để có được tên và mô tả với một thuộc tính cụ thể?

+0

Sử dụng bộ chọn thuộc tính: http://api.jquery.com/category/selectors/ –

Trả lời

15

Để trả lời các câu hỏi cụ thể, "Làm cách nào tôi có thể chuyển đối số này cho hàm parserCardsXml (xml)?"

function loadCards(lang) 
{ 
    $.ajax({ 
     type: "GET", 
     url: 'data/english.xml', 
     dataType: "xml", 
     success: function (xml) { parseCardsXml(xml, lang); } 
    }); 
} 

Và, "Làm cách nào để nhận tên và mô tả với một thuộc tính cụ thể?"

function parseCardsXml(xml, lang) 
{ 
    var $xml = $(xml), 
     name = $xml.find('name[lang="' + lang + '"]').text(), 
     desc = $xml.find('desc[lang="' + lang + '"]').text(); 
} 
3

$(xml).find('name[lang="en"], description[lang="en"]') nên làm các trick

Chỉnh sửa: hoàn chỉnh hơn câu trả lời

$(xml).find('card').each(function() { 
    var id, name, description; 
    id   = $(this).attr('id'); // or just `this.id` 
    name  = $(this).children('name[lang="en"]').text(); 
    description = $(this).children('description[lang="en"]').text(); 
    // do something with the id, name, and description 
}); 
+0

Cảm ơn câu trả lời của bạn, nhưng làm cách nào để đặt tên var và mô tả var có giá trị được tìm thấy? – VansFannel

+0

@VansFannel Đã cập nhật câu trả lời của tôi – Flambino

5
var xml='<cards>\ 
     <card id="3">\ 
      <name lang="es"></name>\ 
      <description lang="es"></description>\ 
      <name lang="en"></name>\ 
      <description lang="en"></description>\ 
     </card></cards>'; 

và phần jquery

$(xml).find('Card').each(function(i,j) 
    {   
     console.log($(j).attr("id")); 
     console.log($(j).find("name").attr("lang")); 

    }); 

http://www.jsfiddle.net/VZjmV/6/

Các vấn đề liên quan