通过传递id在jQuery中解析XML

时间:2011-10-23 14:57:41

标签: jquery xml ajax xml-parsing

我有4个xml块,我想解析jQuery做一个ajax调用。现在,四个xml块彼此不同(但结构相同)。我试图通过将id传递给每个xml块来解析这个xml,但是在我的ajax调用中,我无法检索id属性,因为这是我需要捕获的第一件事就是传递给ajax函数。

我试过这样的事情:

XML就在这里:

       <dropdown>
            <test id="1">
            <optionheading>
                <heads>Heading 1</heads>
                            <value>
                                    <values images='images/1.gif'>Option1</values>
                                    <values images='images/2.gif'>Option2</values>
                                    <values images='images/3.gif'>Option3</values>
                            </value>
            </optionheading>
    .....................................

    ............................
    </test>
    <test id='2">
    <optionheading>
                <heads id="b">H..................
    ..................
    ............
    </test>
</dropdown>

我需要获得test1,test2,et-al

的id

Ajax就在这里:

$("document").ready(function() {
                $.ajax({ 
                    type: "GET",
                    url:"dropdown.xml",
                    dataType: "xml",
                    success :function(xml) {
                        var select = $("#mySelect"); 
                        //I am getting id here
                        var id=$(xml).find('test').attr('id'); 

                        $(xml).find('test'+id).each(function() {
                            $(this).find('optionheading').each(function() {
                            var opthead = $(this).fin......................

1 个答案:

答案 0 :(得分:1)

如果我理解你,应该发生以下情况(输出粗体):

  • <test id="IDHERE">应填充 <select ID="IDHERE">
  • <optionheading>应根据<optgroup>
  • 的定义创建 <heads> 标签
  • 根据给定的<optgroup>元素
  • ,每个<option>都填充了 <values> 元素

下面的代码是按要求实现这个想法的jQuery方法。

注意:$('test', xml)$(xml).find('test')的简写 注意2:由于ID必须是唯一的,select#yourID等于#yourID 注3:此脚本不需要XML的<values>标记。

success: function(xml){
    //Loop through each `<test>`
    $('test', xml).each(function(test_index){
        var id = $(this).attr('id'); //Get the ID of the `<test>`
        // Select <select> element with ID `ID` using the `select#ID` selector
        var select = $('select#' + id);
        $('optionheading', this).each(function() {
            $('values', this).each(function(){
                var $values = $(this);
                $('<option>')
                    .val($values.attr('images'))
                    .text($values.text())
                    .appendTo(optgroup);
            });
            $('<optgroup>')
                .attr('label', $('heads', this).text())
                .appendTo(select);
        });
    });
}

执行后可能的HTML:

<select id='1'>
    <optgroup label='Heading 1'>
        <option value='images/1.gif'>Option1</option>
        <option value='images/2.gif'>Option2</option>
        <option value='images/3.gif'>Option3</option>
    <optgroup>
    ....
</select>
<select id="2">
    ...