2017-03-17 70 views
0

我想获得的legalName,并从这个链接的值phyCity如何从XML树中获取值?

check

而且我想使用JavaScript,我下面写道:

$('.DotNum').click(function (e) { 
     var dotNum = $('#DotNum').val().replace(/\-|\s/g, ''); 
     var url = "https://mobile.fmcsa.dot.gov/qc/services/carriers/"+ dotNum +".xml?webKey=dadd9237da5c0390c9511ef871258e1703abdb36"; 
     var xhr = new XMLHttpRequest(); 
     xhr.onreadystatechange = function() { 
      if (xhr.readyState == XMLHttpRequest.DONE) { 
       alert(xhr.responseText); 
       var xmlDoc = this.responseXML; 
       var legalName = xmlDoc.nodeValue("response").ChildNode("content").ChildNode("carrier").attribute("legalName"); 
       $('#CompName').val(legalName); 
       $('#CompCity').val(phyCity); 
       $('#CompState').val(state); 
       $('#CompAddress').val(address); 
      } 
     } 
     xhr.open('GET', url, true); 
     xhr.send(null); 
    }); 

我不知道如何得到的值legalName 所以我尝试了很多不同的东西...

我该怎么办var legalName = xmlDoc.brabrabar

+0

什么是预期的'VAR legalName = xmlDoc.nodeValue( “应答”)结果ChildNode( “内容”)ChildNode( “载体”)属性( “legalName”)。。。; '? ' – guest271314

+0

@ guest271314不能正常工作..它为空 –

+0

请包括您想与之交互的服务返回的XML示例。 –

回答

0

xmlDoc.nodeValue()函数将返回字符串。

取而代之的是您可以使用,xmlDoc.getElementsByTagName(“载体”)

这将返回节点的数组。如果你确定你只有一个节点,那么你可以直接访问[0]索引,否则循环并使用getAttribute('')获取属性值;

+0

不工作.... –

+0

嘿,好吧,你用它作为.nodeValue(“响应”),它将返回字符串。 因此,请尝试像xmlDoc.getElementsByTagName('carrier')[0] .getAttribute('legalName') –

+0

那样直接访问xml节点请添加一些关于此代码如何帮助OP的解释。这将有助于提供未来观众可以从中学习的答案。请参阅[这个元问题及其答案](http://meta.stackoverflow.com/q/256359/215552)了解更多信息。 –

1

您可以使用.getElementsByTagName()得到你所寻求的元素:

var carrier = xmlDoc.getElementsByTagName('carrier')[0]; 
var legalName = carrier.getAttribute('legalName'); 
var phyCity = carrier.getAttribute('phyCity'); 
var state = carrier.getAttribute('phyState'); 

工作例如:

function queryDot(dotNum) { 
 
    var url = "https://mobile.fmcsa.dot.gov/qc/services/carriers/" + dotNum + ".xml?webKey=dadd9237da5c0390c9511ef871258e1703abdb36"; 
 
    var xhr = new XMLHttpRequest(); 
 
    xhr.onreadystatechange = function() { 
 
    if (xhr.readyState == XMLHttpRequest.DONE) { 
 
     var xmlDoc = this.responseXML; 
 

 
     var carrier = xmlDoc.getElementsByTagName('carrier')[0]; 
 

 
     var legalName = carrier.getAttribute('legalName'); 
 
     var phyCity = carrier.getAttribute('phyCity'); 
 
     var state = carrier.getAttribute('phyState'); 
 

 
     console.log(legalName, phyCity, state); 
 
    } 
 
    } 
 
    xhr.open('GET', url, true); 
 
    xhr.send(null); 
 
} 
 

 
queryDot(44110);

既然你似乎是使用jQuery,你可以也做这个jQuery的方式:

function queryDot(dotNum) { 
 
    $.get("https://mobile.fmcsa.dot.gov/qc/services/carriers/" + dotNum + ".xml?webKey=dadd9237da5c0390c9511ef871258e1703abdb36") 
 
    .then(function(result) { 
 
     var carrier = $(result).find('carrier'); 
 

 
     var legalName = carrier.attr('legalName'); 
 
     var phyCity = carrier.attr('phyCity'); 
 
     var state = carrier.attr('phyState'); 
 

 
     console.log(legalName, phyCity, state); 
 
    }); 
 
} 
 

 
queryDot(44110);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>