从xml获取数组中的特定节点值

时间:2014-11-18 11:31:17

标签: javascript jquery arrays xml xmlhttprequest

我在javascript函数中有一个变量名。

结果变量的值是xml,

enter image description here

我需要使用opportunityid(在Image中突出显示)值形成一个数组。

如何从特定节点值获取并形成数组。?

我使用了函数,

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);

}

2 个答案:

答案 0 :(得分:0)

正如我可以看到你的xml的结构,它如下:

<soap:Body>
    <RetrieveMultipleResponse>
      <RetrieveMultipleResult>
        <BusinessEntities>
          <BusinessEntity>
            <q1:oppourtunityid>
            </q1:oppourtunityid>
          </BusinessEntity>
        </BusinessEntities>
      </RetrieveMultipleResult>
   </RetrieveMultipleResponse>
 </soap:Body>

为此您可以使用DOM元素,如下所示:

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;
}

答案 1 :(得分:0)

我想,你应该尝试下面的代码,我已经从Mozilla的网站上复制了一些代码,因为它有条件的最佳实践代码:)

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;
    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        xmlHttpRequest = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
        try {
            xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } 
        catch (e) {
            try {
                xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } 
            catch (e) {}
        }
    }

    if (!xmlHttpRequest) {
        alert('Giving up :( Cannot create an XMLHTTP instance');
        return false;
    }

    xmlHttpRequest.onreadystatechange = getContents;
    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);

    function getContents() {
        if (xmlHttpRequest.readyState === 4) {
            if (xmlHttpRequest.status === 200) {
                var xmldoc = xmlHttpRequest.responseXML;
                var root_node = xmldoc.getElementsByTagName('q1:Attributes').item(0);
                alert(root_node.firstChild.data);
            } else {
                alert('There was a problem with the request.');
            }
        }
    }
}