Javascript 从xml获取数组中的特定节点值
我有一个变量名作为javascript函数的结果 结果变量的值是xml 我只需要使用opportunityid(在图中突出显示)值形成一个数组 如何从特定的节点值中获取并形成数组 我被用于以下功能Javascript 从xml获取数组中的特定节点值,javascript,jquery,arrays,xml,xmlhttprequest,Javascript,Jquery,Arrays,Xml,Xmlhttprequest,我有一个变量名作为javascript函数的结果 结果变量的值是xml 我只需要使用opportunityid(在图中突出显示)值形成一个数组 如何从特定的节点值中获取并形成数组 我被用于以下功能 function guid(){ var xml = "<?xml version='1.0' encoding='utf-8'?>" + "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envel
function guid(){
var xml = "<?xml version='1.0' encoding='utf-8'?>" +
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
GenerateAuthenticationHeader() +
"<soap:Body>" +
"<RetrieveMultiple xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
"<query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\">" +
"<q1:EntityName>opportunity </q1:EntityName>" +
"<q1:ColumnSet xsi:type='q1:ColumnSet'>" +
"<q1:Attributes>" +
"<q1:Attribute>opportunity id</q1:Attribute>" +
"</q1:Attributes>" +
"</q1:ColumnSet>" +
"<q1:Distinct>false</q1:Distinct>" +
"</query></RetrieveMultiple>" +
"</soap:Body></soap:Envelope>";
var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
xmlHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
xmlHttpRequest.send(xml);
var result = xmlHttpRequest.responseXML.xml;
var doc = new ActiveXObject("MSXML2.DOMDocument");
doc.async = false;
doc.loadXML(result);
}
函数guid(){
var xml=”“+
"" +
GenerateAuthenticationHeader()+
"" +
"" +
"" +
“机会”+
"" +
"" +
“商机id”+
"" +
"" +
“假”+
"" +
"";
var xmlHttpRequest=新的ActiveXObject(“Msxml2.XMLHTTP”);
xmlHttpRequest.Open(“POST”,“/mscrmservices/2007/CrmService.asmx”,false);
setRequestHeader(“SOAPAction”http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
setRequestHeader(“内容类型”,“text/xml;charset=utf-8”);
setRequestHeader(“内容长度”,xml.Length);
xmlHttpRequest.send(xml);
var result=xmlHttpRequest.responseXML.xml;
var doc=新的ActiveXObject(“MSXML2.DOMDocument”);
doc.async=false;
doc.loadXML(结果);
}
我可以看到xml的结构,如下所示:
<soap:Body>
<RetrieveMultipleResponse>
<RetrieveMultipleResult>
<BusinessEntities>
<BusinessEntity>
<q1:oppourtunityid>
</q1:oppourtunityid>
</BusinessEntity>
</BusinessEntities>
</RetrieveMultipleResult>
</RetrieveMultipleResponse>
</soap:Body>
var businessEntites = result.getElementsByTagName('BusinessEntity');
var oppidArr = [];
for(var i=0; i<businessEntities.length; i++)
{
var oppid = businessEntites.item(i).getElementsByTagName('q1:oppourtunityid').item(0).childNodes[0].nodeValue;
oppidArr[i] = oppid;
}
为此,您可以使用DOM元素,如下所示:
<soap:Body>
<RetrieveMultipleResponse>
<RetrieveMultipleResult>
<BusinessEntities>
<BusinessEntity>
<q1:oppourtunityid>
</q1:oppourtunityid>
</BusinessEntity>
</BusinessEntities>
</RetrieveMultipleResult>
</RetrieveMultipleResponse>
</soap:Body>
var businessEntites = result.getElementsByTagName('BusinessEntity');
var oppidArr = [];
for(var i=0; i<businessEntities.length; i++)
{
var oppid = businessEntites.item(i).getElementsByTagName('q1:oppourtunityid').item(0).childNodes[0].nodeValue;
oppidArr[i] = oppid;
}
var businessEntites=result.getElementsByTagName('BusinessEntity');
var oppidArr=[];
对于(var i=0;i我想,您应该尝试下面的代码,我从Mozilla的站点复制了一些代码,因为它有带条件的最佳实践代码:)
函数guid(){
var xml=”“+
"" +
GenerateAuthenticationHeader()+
"" +
"" +
"" +
“机会”+
"" +
"" +
“商机id”+
"" +
"" +
“假”+
"" +
"";
var-xmlHttpRequest;
如果(window.XMLHttpRequest){//Mozilla,Safari。。。
xmlHttpRequest=新的xmlHttpRequest();
}如果(window.ActiveXObject){//IE
试一试{
xmlHttpRequest=新的ActiveXObject(“Msxml2.XMLHTTP”);
}
捕获(e){
试一试{
xmlHttpRequest=新的ActiveXObject(“Microsoft.XMLHTTP”);
}
捕获(e){}
}
}
如果(!xmlHttpRequest){
警报(“放弃:(无法创建XMLHTTP实例”);
返回false;
}
xmlHttpRequest.onreadystatechange=getContents;
xmlHttpRequest.open(“POST”,“/mscrmservices/2007/CrmService.asmx”,false);
setRequestHeader(“SOAPAction”http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
setRequestHeader(“内容类型”,“text/xml;charset=utf-8”);
setRequestHeader(“内容长度”,xml.Length);
xmlHttpRequest.send(xml);
函数getContents(){
if(xmlHttpRequest.readyState==4){
if(xmlHttpRequest.status==200){
var xmldoc=xmlHttpRequest.responseXML;
var root_node=xmldoc.getElementsByTagName('q1:Attributes')。项(0);
警报(根节点.firstChild.data);
}否则{
警报(“请求有问题”);
}
}
}
}
这种情况会发生在客户端吗?您是否尝试将xml解析为javascript对象,然后在正确的对象组件上进行迭代?如果是这样,您可以使用lodash对其进行爬网,或者您可以构建自己的爬网器。对象不支持,或者在我实现javascript函数时会出现方法错误。请转到再次回答我的问题。我添加了获取xml的javascript。我只是在代码中使用var businessEntites=result.getElementsByTagName('BusinessEntity');它显示对象不支持或方法错误