使用javascript函数查询两个xml文件
我在一个项目上工作,在受到限制的情况下,我很挣扎。我通常会用PHP处理这类事情,但项目需要在有限的服务器上运行,我需要完全用javascript来完成 脚本如下: 1-加载XML文件1,找到playState子节点等于“Running”的节点的“id”(只有一个) 2-使用id,加载XML文件2,并返回id与步骤1中的值匹配的时间线的名称 我完全被难住了,我尝试过使用jquery选择器,但无法掌握如何实际搜索和返回一个特定值。任何帮助都将不胜感激 XML文件1:使用javascript函数查询两个xml文件,javascript,jquery,xml,ajax,Javascript,Jquery,Xml,Ajax,我在一个项目上工作,在受到限制的情况下,我很挣扎。我通常会用PHP处理这类事情,但项目需要在有限的服务器上运行,我需要完全用javascript来完成 脚本如下: 1-加载XML文件1,找到playState子节点等于“Running”的节点的“id”(只有一个) 2-使用id,加载XML文件2,并返回id与步骤1中的值匹配的时间线的名称 我完全被难住了,我尝试过使用jquery选择器,但无法掌握如何实际搜索和返回一个特定值。任何帮助都将不胜感激 XML文件1: <response>
<response>
<timelineStatus id = "1">
<playState>Idle</playState>
<position>P00H00M00.00S</position>
<onStage>false</onStage>
</timelineStatus>
<timelineStatus id = "101">
<playState>Idle</playState>
<position>P00H00M00.00S</position>
<onStage>false</onStage>
</timelineStatus>
<timelineStatus id = "102">
<playState>Running</playState>
<position>P00H00M00.00S</position>
<onStage>false</onStage>
</timelineStatus>
<timelineStatus id = "103">
<playState>Idle</playState>
<position>P00H00M00.00S</position>
<onStage>false</onStage>
</timelineStatus>
<timelineStatus id = "104">
<playState>Idle</playState>
<position>P00H00M00.00S</position>
<onStage>false</onStage>
</timelineStatus>
......
闲置的
P00H00M00.00S
假的
闲置的
P00H00M00.00S
假的
跑步
P00H00M00.00S
假的
闲置的
P00H00M00.00S
假的
闲置的
P00H00M00.00S
假的
......
XML文件2:
<response>
<timeline id = "1">
<name>System - Custom Color Base</name>
<length>P00H00M10.00S</length>
<timeSource>
<type>Internal</type>
</timeSource>
<timeOffset>P00H00M00.00S</timeOffset>
</timeline>
<timeline id = "101">
<name>Preset - Red</name>
<length>P00H00M00.00S</length>
<timeSource>
<type>Internal</type>
</timeSource>
<timeOffset>P00H00M00.00S</timeOffset>
</timeline>
<timeline id = "102">
<name>Preset - Green</name>
<length>P00H00M00.00S</length>
<timeSource>
<type>Internal</type>
</timeSource>
<timeOffset>P00H00M00.00S</timeOffset>
</timeline>
<timeline id = "103">
<name>Preset - Blue</name>
<length>P00H00M00.00S</length>
<timeSource>
<type>Internal</type>
</timeSource>
<timeOffset>P00H00M00.00S</timeOffset>
</timeline>
<timeline id = "104">
<name>Preset - Magenta</name>
<length>P00H00M00.00S</length>
<timeSource>
<type>Internal</type>
</timeSource>
<timeOffset>P00H00M00.00S</timeOffset>
</timeline>
......
系统-自定义颜色基础
P00H00M10.00S
内部的
P00H00M00.00S
预设-红色
P00H00M00.00S
内部的
P00H00M00.00S
预设-绿色
P00H00M00.00S
内部的
P00H00M00.00S
预设-蓝色
P00H00M00.00S
内部的
P00H00M00.00S
预设-洋红色
P00H00M00.00S
内部的
P00H00M00.00S
......
以下是您使用JavaScript解决方案的完整详细信息
xml1.xml
如上所示
xml2.xml
如上所示
解决方案:
<html>
<head>
<script>
function getOutput(){
var xhr1 = new XMLHttpRequest();
xhr1.open("GET", "xml1.xml", false);
xhr1.send(null);
xml1 = (xhr1.responseXML);
var xPathRes = xml1.evaluate("//timelineStatus/playState", xml1, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE , null);
result = new Array();
var res = xPathRes.iterateNext();
while (res) {
var playState = res.textContent;
if(playState == "Running")
{
resParentNode = res.parentNode;
var timelinstStatusId = resParentNode.getAttribute("id"); //id="102"
var xhr2 = new XMLHttpRequest();
xhr2.open("GET", "xml2.xml", false);
xhr2.send(null);
xml2 = (xhr2.responseXML);
console.log(xml2);
var xPathRes2 = xml2.evaluate("//timeline[@id='"+timelinstStatusId+"']/name", xml2, null, XPathResult.FIRST_ORDERED_NODE_TYPE , null);
result = xPathRes2.singleNodeValue;
console.log(result.textContent); //Preset - Green
return result.textContent; //Preset - Green
break;
}
//Iterate through set of Results
res = xPathRes.iterateNext();
}
}
</script>
</head>
<body>
<a href="javascript:void(0);" onclick="getOutput();">getOutput</a>
</body>
</html>
函数getOutput(){
var xhr1=新的XMLHttpRequest();
open(“GET”,“xml1.xml”,false);
xhr1.send(空);
xml1=(xhr1.responseXML);
var xPathRes=xml1.evaluate(//timelineStatus/playState),xml1,null,XPathResult.ORDERED\u NODE\u ITERATOR\u TYPE,null);
结果=新数组();
var res=xPathRes.iterateNext();
而(res){
var playState=res.textContent;
如果(播放状态=“正在运行”)
{
resParentNode=res.parentNode;
var timelinstStatusId=resParentNode.getAttribute(“id”);//id=“102”
var xhr2=新的XMLHttpRequest();
open(“GET”,“xml2.xml”,false);
xhr2.send(空);
xml2=(xhr2.responseXML);
console.log(xml2);
var xPathRes2=xml2.evaluate(“//timeline[@id=”+timelinstStatusId+“']/name”,xml2,null,XPathResult.FIRST\u ORDERED\u NODE\u TYPE,null);
结果=xPathRes2.singleNodeValue;
console.log(result.textContent);//预设-绿色
return result.textContent;//预设-绿色
打破
}
//遍历一组结果
res=xPathRes.iterateNext();
}
}