2014-11-18 2 views
0

javascript 함수의 결과로 하나의 변수 이름이 있습니다.XML에서 배열의 특정 노드 값 가져 오기

결과 변수 값

enter image description here

는 I 값만 (이미지 강조 됨) 이는 OpportunityId 가진 어레이를 형성 할 필요가 XML이다.

특정 노드 값에서 얻고 배열을 형성하는 방법. 다음과 같이 이에 대한

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

당신은 DOM 요소를 사용할 수있다 : 다음과 같은 기능 다음

내가 사용을

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

} 
+0

클라이언트 측에서 발생합니까? JavaScript 객체로 XML을 파싱하려고 시도 했습니까? 그런 다음 올바른 객체 구성 요소를 반복합니다. 그럴 경우 lodash를 사용하여 크롤링하거나 자신의 크롤러를 만들 수 있습니다. – htellez

답변

0

나는 당신의 XML의 구조를 볼 수 있듯이, 그것은이다 : 그것은 최고의 prac을 보내고으로

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

개체가 지원되지 않거나 메서드 오류가 발생할 때 나는 자바 스크립트 함수를 암시합니다 – User

+0

오류 메시지를 표시 할 수 있습니까? –

+0

gothrough 내 질문 again.I XML을 얻기위한 javascript를 추가하십시오. 그냥 사용 var businessEntites = result.getElementsByTagName ('BusinessEntity'); 내 코드에서. 그것은 개체 dosen't 지원 또는 메서드 오류를 보여줍니다. – User

0

난 당신이 코드 아래에 시도해야, 생각, 내가 모질라의 사이트에서의 일부를 복사 한 조건 코드 :

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.'); 
      } 
     } 
    } 
} 
관련 문제