2011-01-11 16 views
2

今、このコードはXMLファイルを細かく解析していますが、複数の著者ノードがあるXMLファイルでは、各著者の間にコンマを置くことができます。 XMLは、1人から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エスケープします。

関連する問題