XML to Array to dropdown(jsfiddle示例)

时间:2016-10-17 17:08:09

标签: arrays ajax xml dropdown

感谢您对此进行调查,我认为这将是一个简单的答案,但我自己无法弄清楚。

我正在尝试制作一个下拉列表,从包含以下许多XML代码段(citrowske.com/xml.xml)的远程XML文档中选择用户

<User>
   <Id>111111111111</Id>
   <UserName>testuser1@example.com</UserName>
   <FirstName>Test</FirstName>
   <LastName>User1</LastName>
   <Active>true</Active>
   <Email>testuser1@example.com</Email>
   <AccessLevel>Learner</AccessLevel>
</User>

这是有效的,但在我选择用户后,我不确定如何提取其他相关信息以供使用。 我认为最好有一个每个项目ID [],UserName []等的数组,但不知道如何做到这一点,许多搜索都没有产生相关结果。

以下是我目前提取的XML代码和搜索First&amp;姓氏。

&#13;
&#13;
$.ajaxPrefilter( function (options) {
  if (options.crossDomain && jQuery.support.cors) {
    var http = (window.location.protocol === 'http:' ? 'http:' : 'https:');
    options.url = http + '//cors-anywhere.herokuapp.com/' + options.url;
    //options.url = "http://cors.corsproxy.io/url=" + options.url;
  }
});

$.get(
    'http://citrowske.com/xml.xml',
    function (xml) {
        //console.log("> ", xml);
        //$("#viewer").html(xml);
        
////////////////////////////////////
var select = $('#yourdropdownbox');
		select.append('<option value="">Select a User</option>');				
		$(xml).find('User').each(function(){											
		var FirstNames = $(this).find('FirstName').text();
	  var LastNames = $(this).find('LastName').text();
    
		select.append("<option value='"+ FirstNames +"'>"+FirstNames+" "+LastNames+"</option>");
	  });
	}
////////////////////////////////////

);
&#13;
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

<select id="yourdropdownbox">

</select>
&#13;
&#13;
&#13;

与迄今为止的工作代码https://jsfiddle.net/65n79t6d/

的jsfiddle一起

1 个答案:

答案 0 :(得分:0)

完全披露,我从来没有发过一个问题并且有人在stackoverflow上回答它,我的问题不清楚吗?我如何得到答案?我花了2.5周的时间研究这个问题,但最终得到了PTL。

无论如何,答案是只为每个要从用户提取的信息创建一个数组,然后将数据存储到可以引用的数字(i)下。
示例:

id[1] //will pull the id for the first user
username[1]// will pull the username for the first user
lastname[1]// will pull the last name for the first user 

请记住,由于下面的陈述,它将完成括号中所有每个用户找到的所有语句

$(xml).find('User').each(function(){

现在您正在搜索,使用

提取所需的所有相关信息部分
array[i] = $(this).find('InfoName').text();

然后在搜索下一个节点之前,增加i变量,使其不会覆盖刚刚保存数据的数组变量。

下面是一段对我有用的内容,它会在值发生变化时显示信息。如果您不想在HTML中使用java,则可以使用eventlistener。

var id = ["0"];// define all those arrays, you could also use an obj
var username = ["0"];
var lastname = ["0"];
var firstname = ["0"];
var email = ["0"];
var active = ["0"];
var accesslevel = ["0"];
var i = 0;

$.ajaxPrefilter( function (options) {
  if (options.crossDomain && jQuery.support.cors) {
    var http = (window.location.protocol === 'http:' ? 'http:' : 'https:');
    options.url = http + '//cors-anywhere.herokuapp.com/' + options.url;
    //options.url = "http://cors.corsproxy.io/url=" + options.url;
  }
});

$.get(
    'http://citrowske.com/xml.xml',
    function (xml) {
        //console.log("> ", xml);
        //$("#viewer").html(xml);
        
////////////////////////////////////
var select = $('#yourdropdownbox');
	select.append('<option value="">Select a User</option>');				
	$(xml).find('User').each(function(){	
                    id[i] = $(this).find('Id').text(); // get id in each <User></User> and put it in the array id[i#]
                    username[i] = $(this).find('UserName').text();// "" for UserName
                    firstname[i] = $(this).find('FirstName').text();// "" for FirstName
                    lastname[i] = $(this).find('LastName').text();// "" for LastName
                    active[i] = $(this).find('Active').text();// "" for Active
                    email[i] = $(this).find('Email').text();// "" for Email
                    accesslevel[i] = $(this).find('AccessLevel').text();// "" for AccessLevel
    
		select.append("<option value='"+ i +"'>"+firstname[i]+" "+lastname[i]+"</option>");// The shown text is the First & Last name while the value is the i number associated with their information
	  i++;// increment the i value 
    }); // end of the user, now on to the next user
	}
////////////////////////////////////

);

function info(){
 var num =  document.getElementById('yourdropdownbox').value;
  alert("Name: "+firstname[num]+" "+lastname[num]+"\nUsername: "+username[num]+"\nID: "+id[num]+"\nEmail: "+email[num]+"\nActive: "+active[num]+"\nAccess Level: "+accesslevel[num]);
};
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

<select id="yourdropdownbox" onchange="info()">

</select>