感谢您对此进行调查,我认为这将是一个简单的答案,但我自己无法弄清楚。
我正在尝试制作一个下拉列表,从包含以下许多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;姓氏。
$.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;
与迄今为止的工作代码https://jsfiddle.net/65n79t6d/
的jsfiddle一起答案 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>