2011-01-11 5 views
2

Momentan analysiert dieser Code die XML-Datei, aber in der XML-Datei mit mehreren Autorenknoten möchte ich ein Komma zwischen jedem Autor einfügen können. Der XML-Wert variiert von einem bis zu einem bis vier Autoren. Vielen Dank im Voraus.Wie wähle ich xml-untergeordnete Knoten in jQuery?

/* 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> 

Antwort

1

Ich würde Ihren Code so etwas wie dies ändern:

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'); 
    }); 
} 

Die Vorteile sind, dass sie die durch Kommata getrennte Autor hat, wie man wollte, aber es verhindert auch keine XSS-Angriffe in der generierte HTML mit Hilfe von jQuery's text function zu HTML-Escape die Ausgabe.