2011-01-11 7 views
2

지금이 코드는 XML 파일을 잘 파싱합니다. 그러나 여러 저자 노드가있는 XML 파일에서 각 저자 사이에 쉼표를 넣을 수 있어야합니다. XML은 1 ~ 4 명의 저자에 따라 다릅니다. 미리 감사드립니다.jQuery에서 xml 하위 노드는 어떻게 선택합니까?

/* Load XML File */ 
$.ajax({ 
    url: "xml/ajax-response-data.xml", 
    cache: false, 
    success: libraryXML 
}); 

function libraryXML (xml) { 
    $(xml).find('book').each(function(){ 

      /* Parse the XML File */ 
     var id = $(this).attr('id'); 
     var checked = $(this).attr('checked-out') 
     var title = $(this).find('title').text(); 
     var isbn = $(this).find('isbn-10').text(); 
     var authors = $(this).find('authors').text(); 


     /* Spit out some books */ 
     $('<li class="book-'+id+' checked'+checked+'"></li>').html('<span class="id">' + id + '</span><span class="title">' + title + '</span><span class="author">' + authors +'</span><span class="isbn">' + isbn + '</span>').appendTo('.library'); 

    }); 
} 

<book id="1" checked-out="1"> 
    <authors> 
    <author>David Flanagan</author> 
    </authors> 
    <title>JavaScript: The Definitive Guide</title> 
    <isbn-10>0596101996</isbn-10> 
</book> 
<book id="2" checked-out="1"> 
    <authors> 
    <author>John Resig</author> 
    </authors> 
    <title>Pro JavaScript Techniques (Pro)</title> 
    <isbn-10>1590597273</isbn-10> 
</book> 
<book id="3" checked-out="0"> 
    <authors> 
    <author>Erich Gamma</author> 
    <author>Richard Helm</author> 
    <author>Ralph Johnson</author> 
    <author>John M. Vlissides</author> 
    </authors> 
    <title>Design Patterns: Elements of Reusable Object-Oriented Software</title> 
    <isbn-10>0201633612</isbn-10> 
</book> 

답변

1

나는 이런 식으로 뭔가에 코드를 변경 것 :

function libraryXML (xml) { 
    $(xml).find('book').each(function(){ 

    /* Parse the XML File */ 
    var id = $(this).attr('id'); 
    var checked = $(this).attr('checked-out') 
    var title = $(this).find('title').text(); 
    var isbn = $(this).find('isbn-10').text(); 
    var authors = $(this).find('authors'); 

    /* Spit out some books */ 
    $('<li></li>') 
     .addClass('book-'+id).addClass('checked'+checked) 
     .append($('<span class="id"></span>').text(id)) 
     .append($('<span class="title"></span>').text(title)) 
     .append($('<span class="author"></span>').text($.map(authors, function(author){ return $(author).text() }).join(', '))) 
     .append($('<span class="isbn"></span>').text(isbn)) 
     .appendTo('.library'); 
    }); 
} 

장점은 당신이 원하는 것처럼, 쉼표로 구분 저자 않는다는 것을, 그러나 그것은 또한 어떤 XSS 공격을 방지 jQuery's text function을 사용하여 HTML을 생성하여 출력을 HTML 이스케이프 처리합니다.

관련 문제