javascript - 如何解析存储 XML 数据的变量并动态打印数据?
问题描述
假设我从一个格式如下的 XML 页面中提取:
<people>
<person>
<name>Bob</name>
<age>45</age>
<hobby>Programming</hobby>
</person>
....
</people>
如果我有一个将 XML 数据读入 JavaScript 变量的函数,如下所示:
...
var data = responseXML;
...
并且一个 HTML 下拉列表动态填充了数据变量中的名称(选项将通过 JavaScript 使用主体上的 onload 调用添加。在页面加载之前,代码实际上不会包含选项标签,如下所示):
<select id="names" onchange="getInfo()">
<option value="Bob">Bob</option>
<option value="Jim">Jim</option>
<option value="Ron">Ron</option>
</select>
在 select 上使用 onchange 调用时,如何动态地将有关从下拉列表中选择的人的信息列出到无序列表中?
如果选择 Bob,输出将如下所示:
Name: Bob
Age: 45
Hobby: Golf
如果从下拉列表中选择了一个新人,则将显示他们的信息。鉴于我已有的代码,如果将新人添加到 XML 文档中,他们将自动添加到下拉列表中,因此如果选择他们的信息应该能够自动显示,而无需添加任何其他代码。
我更喜欢使用 JavaScript 而不是 jQuery,因为这是我用来将 XML 文档数据读入 JavaScript 数据变量的方法。
解决方案
我创建了一个新函数 asPopulate Dropdown
并修改了您的getInfo()
函数以从 XML 文件中检索数据。希望下面的代码有帮助:
var xml = `<people>
<person>
<name>Bob</name>
<age>45</age>
<hobby>Programming</hobby>
</person>
<person>
<name>Jim</name>
<age>40</age>
<hobby>Study</hobby>
</person>
<person>
<name>Ron</name>
<age>50</age>
<hobby>Dancing</hobby>
</person>
</people>`;
var parser = new DOMParser();
var responseXML = parser.parseFromString(xml,"text/xml");
var data = responseXML;
populateDropdown();
function getInfo(){
var name = document.getElementById("names").value;
var people = data.getElementsByTagName("people")[0].childNodes;
for (person in people){
if(people[person].innerHTML){
var personData = {
name: people[person].getElementsByTagName("name")[0].innerHTML,
age: people[person].getElementsByTagName("age")[0].innerHTML,
hobby: people[person].getElementsByTagName("hobby")[0].innerHTML,
}
if (personData.name == name){
var infoDiv = document.getElementById("info");
infoDiv.innerHTML = `Name: ${personData.name} <br>Age:${personData.age}<br>Hobby:${personData.hobby}`;
break;
}
}
}
}
function populateDropdown(){
var people = data.getElementsByTagName("people")[0].childNodes;
for (person in people){
if(people[person].innerHTML){
var select = document.getElementById("names");
var option = document.createElement("option");
option.value = people[person].getElementsByTagName("name")[0].innerHTML;
option.innerHTML = people[person].getElementsByTagName("name")[0].innerHTML,
select.appendChild(option);
}
}
}
<select id="names" onchange="getInfo()">
</select>
<div id="info">
</div>
推荐阅读
- mysql - 如何在一个表中插入影响mysql中另一个表的值
- java - 无法解析文本,找到未解析的文本
- c# - 使用反射加载程序集 - “对象”不包含“描述”的定义?
- postgresql - 查询条件不超过一定数量(Postgresql)
- sql - 定期在 toad/pl sql 中发送 http 请求
- java - android如何以一定频率播放哔声
- java - Android获取模拟器的错误位置
- javascript - 什么时候应该使用 WebHID 而不是 WebUSB?
- pandas - Pandas 分类值计数的时间序列图
- javascript - 在 HTML 中循环使用 JavaScript 选择“选项”标签不给出结果