【问题标题】:User jQuery to get nested elements from XML用户 jQuery 从 XML 中获取嵌套元素
【发布时间】:2010-04-20 11:03:38
【问题描述】:

我正在为此旋转。如何从下面的 XML 中获取以下嵌套元素的值(我也将代码放在下面)?我在“descShort”值之后,然后是大写“Last”和大写“change”:

<indices>
<index>
    <code>DJI</code>
    <exchange>NYSE</exchange>
    <liveness>DELAYED</liveness>
    <indexDesc>
        <desc>Dow Jones Industrials</desc>
        <descAbbrev>DOW JONES</descAbbrev>
        <descShort>DOW JONES</descShort>
        <firstActive></firstActive>
        <lastActive></lastActive>
    </indexDesc>
    <indexQuote>
        <capital>
            <first>11144.57</first>
            <high>11153.79</high>
            <low>10973.92</low>
            <last>11018.66</last>
            <change>-125.9</change>
            <pctChange>-1.1%</pctChange>
        </capital>
        <gross>
            <first>11144.57</first>
            <high>11153.79</high>
            <low>10973.92</low>
            <last>11018.66</last>
            <change>-125.9</change>
            <pctChange>-1.1%</pctChange>
        </gross>
        <totalEvents>4</totalEvents>
        <lastChanged>16-Apr-2010 16:03:00</lastChanged>
    </indexQuote>
</index>
<index>
    <code>XAO</code>
    <exchange>ASX</exchange>
    <liveness>DELAYED</liveness>
    <indexDesc>
        <desc>ASX All Ordinaries</desc>
        <descAbbrev>All Ordinaries</descAbbrev>
        <descShort>ALL ORDS</descShort>
        <firstActive>06-Mar-1970</firstActive>
        <lastActive></lastActive>
    </indexDesc>
    <indexQuote>
        <capital>
            <first>5007.30</first>
            <high>5007.30</high>
            <low>4934.00</low>
            <last>4939.40</last>
            <change>-67.9</change>
            <pctChange>-1.4%</pctChange>
        </capital>
        <gross>
            <first>5007.30</first>
            <high>5007.30</high>
            <low>4934.00</low>
            <last>4939.40</last>
            <change>-67.9</change>
            <pctChange>-1.4%</pctChange>
        </gross>
        <totalEvents>997</totalEvents>
        <lastChanged>19-Apr-2010 17:02:54</lastChanged>
    </indexQuote>
</index>

$.ajax({
            type: "GET",
            url: "stockindices.xml",
            dataType: "xml",
            success: function(xml) {
                $(xml).find('index').each(function(){

                    var self = $(this);                     
                    var code = self.find('indexDesc');

                    $(code).find('indexDesc').each(function(){
                        alert(self.find('descShort').text());
                    });                     

                    $('<span class=\"tickerItem\"></span>').html(values[0].text()).appendTo('#marq');                                                                   
                });
            }
        });

【问题讨论】:

标签: jquery xml nested-attributes


【解决方案1】:

你的功能有一些缺陷。应该这样做:

success: function(xml) {
    $(xml).find('index').each(function(){

        var value = $(this).find('indexDesc descShort').text();
        value += ' ' + $(this).find('indexQuote capital last').text();
        value += ' ' + $(this).find('indexQuote capital change').text();

        $('<span class="tickerItem"></span>').text(value).appendTo('#marq');
    });
}

您的代码上有两个 cmets:

var code = self.find('indexDesc');

$(code).find('indexDesc').each(function(){
       alert(self.find('descShort').text());
}); 

在这里您将元素indexDesc 分配给变量code,然后您尝试在indexDesc(不存在)中找到元素indexDesc

$('<span class=\"tickerItem\"></span>').html(values[0].text())

我真的很想知道values 来自哪里,它从未被声明过。而且你不需要在单引号中转义双引号。


我真的建议阅读documentationtutorial 以了解jQuery 的基础知识。

【讨论】:

  • 嗨菲利克斯。感谢您的洞察力。非常感谢。
  • Felix,我刚刚对其进行了测试,我注意到检索“indexDesc descShort”的部分由于某种原因返回为空。很奇怪。
  • @Dkong:嗯,我不知道。根据您显示的 XML 文档,它应该可以工作。
【解决方案2】:
success: function(xml) {
  $(xml).find('index indexDesc descShort').each(function(){                    

    $('<span class=\"tickerItem\"></span>').html($(this).text()).appendTo('#marq');                                                                   
  });
}

请求的第二个示例(这是最易读的,可能进行了一些优化)

success: function(xml) {
  $(xml).find('index').each(function(){                    

    var desc = $('indexDesc descShort', this).text();
    var last = $('indexQuote capital last', this).text();
    var change = $('indexQuote capital change', this).text();

    //Do whatever with the text values                                                                  
  });
}

【讨论】:

  • 嗨,谢谢。我还希望获得以下值:'index indexQuote capital last'。我可以以某种方式做到这一点,以便与您提供给我的 descShort 值一起在一次迭代中完成吗?
  • 感谢詹姆斯。出于某种原因(使用上面的代码和 XML,甚至在仔细检查之后),“indexDesc descShort”文本返回为空(绝对没有拼写错误)。比扎罗
  • 我在您粘贴的 xml 中没有看到结束 标记
  • 嗨詹姆斯,很明显应该在那里,但即使它是,这一行仍然没有读取任何内容: var desc = $('indexDesc descShort', this).text();很奇怪
  • 还有其他事情发生,因为两个代码示例都产生了相同的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 2015-10-15
  • 2023-03-23
相关资源
最近更新 更多