如何在 jQuery 中选择 xml 子节点?

发布于 2024-10-11 08:21:12 字数 1807 浏览 3 评论 0原文

现在,这段代码可以很好地解析 XML 文件,但是,在 XML 文件中,我有多个作者节点,我希望能够在每个作者之间添加逗号。 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>

Right now this code parses the XML file fine, however, in the XML file I have multiple author nodes, I'd like to be able to put a comma in between each author. The XML varies from one to from one to four authors. Thank you ahead of time.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

黯然#的苍凉 2024-10-18 08:21:12

我会将您的代码更改为如下所示:

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

优点是它可以像您想要的那样以逗号分隔作者,但它还可以通过使用 jQuery 的文本函数 对输出进行 HTML 转义。

I'd change your code to something like this:

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

The advantages are that it does the comma-separated author, like you wanted, but it also prevents any XSS attacks in the generated HTML by using jQuery's text function to HTML-escape the output.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文