访问解析字符串中的XML节点
Access XML nodes in parse string
我通过PHP代理执行Ajax调用,从不同域的服务器接收XML(以解决跨源"问题")。我没有将XML节点的值输入到html标记中。我的浏览器控制台中没有错误。在Firebug中,我可以在响应和XML列中看到XML数据。完整代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<h2>Flightinfo</h2>
<button type="button" onclick="loadXMLDoc()">
Get Flight ID</button>
<p id="fid"></p>
<script>
function loadXMLDoc() {
jQuery(document).ready(function($) {
$.ajax({
url: "http://d2f.no/flightinfo/proxy.php",
type: "POST",
data: {
address: "http://flydata.avinor.no/XmlFeed.asp?TimeFrom=1&TimeTo=7&airport=OSL&direction=D&lastUpdate=2016-03-10T15:03:00Z"
},
success: function myFunction(xml) {
var x, i, xmlDoc, txt, parser;
parser = new DOMParser(); // new Parser
xmlDoc = parser.parseFromString(xmlDoc,"text/xml"); // Parse string
txt = "";
x = xmlDoc.getElementsByTagName("flight_id");
for (i = 0; i< x.length; i++) {
txt += x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("fid").innerHTML = txt;
}
});
});
}
</script>
</body>
</html>
收到的部分XML数据:
<airport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://flydata.avinor.no/XmlFeed.xsd" name="OSL">
<flights lastUpdate="2016-04-07T00:37:16Z">
<flight uniqueID="5760860">
<airline>OSL</airline>
<flight_id>OSL424</flight_id>
<dom_int>D</dom_int>
<schedule_time>2016-03-10T10:15:00Z</schedule_time>
<arr_dep>D</arr_dep>
<airport>BDU</airport>
<gate>PAD</gate>
</flight>
<flight uniqueID="5758058">
<airline>AC</airline>
<flight_id>AC6377</flight_id>
<dom_int>S</dom_int>
<schedule_time>2016-03-11T05:30:00Z</schedule_time>
<arr_dep>D</arr_dep>
<airport>BRU</airport>
<check_in>10</check_in>
</flight>
链接到XML提要
我在这里错过了什么?
这里有一个简化的方法,更多的是jQuery方式:
<button type="button" id="load_btn">Get Flight IDs</button>
<p id="fid"></p>
<script>
$( document ).ready(function() {
$('#load_btn').click(function() {
loadXMLDoc();
});
});
function loadXMLDoc() {
$.ajax({
url: "http://d2f.no/flightinfo/proxy.php",
type: "POST",
dataType: "xml",
data: {
address: "http://flydata.avinor.no/XmlFeed.asp?TimeFrom=1&TimeTo=7&airport=OSL&direction=D&lastUpdate=2016-03-10T15:03:00Z"
},
})
.done(function (xml) {
var ids = $(xml).find('flight_id');
var txt = "";
$.each(ids, function(index) {
txt += ids[index].textContent + "<br>";
});
$('#fid').html(txt);
});
}
</script>
代码中的一个问题是行:
xmlDoc = parser.parseFromString(xmlDoc,"text/xml"); // Parse string
它使用xmlDoc两次。我相信你是故意的:
xmlDoc = parser.parseFromString(xml,"text/xml"); // Parse string
此外,从jQuery 1.8开始,成功已经被弃用,取而代之的是.done.
相关文章:
- 在 JavaScript 中过滤 XML 节点
- 获取xml节点文本
- 不存在的XML节点破坏了我的脚本
- JavaScript仅加载10个xml节点
- 访问解析字符串中的XML节点
- 使用R从xml节点提取javascript语法
- 如何改进javascript中的提取xml节点
- 按值访问 XML 节点
- 检索在下载URL中具有特定值的XML节点
- 获取 XML 节点并将其存储在变量中
- 查找嵌套 xml 节点的更简单方法
- 转换为 JSON 的 XML 节点会出错
- 如何在IE8中获取XML节点的文本值
- 缺少 XML 节点
- 如何使用 Javascript 编辑 XML 节点的数据
- 使用 Javascript 提取整个 XML 节点内容
- XML解析器/从XML节点列表创建一个XML DOM文档
- jQuery检索顶级XML节点
- 始终如一地从 XML 节点获取文本
- 如何使用 JavaScript 遍历 XML 节点和子节点