【问题标题】:JQuery XML Parsing Multi-Level Of Same ElementJQuery XML解析同一元素的多级
【发布时间】:2013-04-05 15:24:07
【问题描述】:

这是我在这里的第一个问题,我对 Web 开发世界还很陌生。我有一个简单的问题,所以我不想用我所有的代码来惹恼你,我会给你一个更简单的例子:

我有一个看起来像这样的 XML,我们称之为“example.xml”:

<a>
   <b>1</b>
   <a>
      <b>2</b>
      <c>3</c>
   </a>
</a>

所以有多个级别的 'a' 包含或不包含 'c' 元素。当我使用

解析这个 xml 时
$.ajax({type: "GET",async: false, cache: false, url: "example.xml",dataType: "xml",success: parseXml,  error: function(xhr, status, error) {alert(error)}});

parseXml 会这样:

function parseXml(xml){
    var result = new Object()
    $(xml).find('a').each(function(){
       result.b = $(this).find('b:first').text()
       result.c = $(this).find('c:first').text()
    }
}

所以我的问题是这个 JQuery 会在第一级“a”中找到一个“c”,即使没有。我认为它在第二个“a”中搜索以找到一个“c”。这就是为什么我需要在 find() 函数中添加“:first:”,这样它就不会返回第二个 'b'...我认为这不是最好的方法,因为如果 'b'在第二级'a'之后声明,我会得到第二级'b'......我不知道你是否在关注,但这是我的问题:

  1. 这是一个提议者 XML 文件吗?
  2. 如果不是,假设我无法更改它,我怎样才能获得一个不会从第二级获取其信息的适当 XML 解析器?

非常感谢您的帮助!

【问题讨论】:

    标签: jquery xml parsing multi-level


    【解决方案1】:

    尝试可以使用.children 仅在直接子代中搜索

    function parseXml(xml){
        var result = new Object()
        $(xml).find('a').each(function(){
           result.b = $(this).children('b').text()
           result.c = $(this).children('c').text()
        }
    }
    

    .find() 将搜索所有级别的后代

    获取当前匹配集合中每个元素的后代 元素,由选择器、jQuery 对象或元素过滤。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      相关资源
      最近更新 更多