雅虎地方发现者api响应xml显示

时间:2011-01-12 15:36:47

标签: xml api xmlhttprequest xslt

我在这里尝试使用yahoo place finder api。 我想获得给定地点名称的特定位置的纬度和经度。 当我使用地方查找器api时,我在xml中获取响应文本,并尝试使用Xslt设置样式。

我的问题:

http://where.yahooapis.com/geocode?location=701+First+Ave,+Sunnyvale,+CA&appid=myapiid

是获取请求,我得到一个xml作为响应,我必须使用xslt和显示样式。

我在这里有一个代码可以做到这一点。我相信它是对的。我总是得到一个空白页

    <html>
<head>
<script>
function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
  {
  xhttp=new XMLHttpRequest();
  }
else
  {
  xhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xhttp.open("GET",dname,false);
xhttp.send("");
return xhttp.responseXML;
}

function displayResult()
{
xml=loadXMLDoc("http://where.yahooapis.com/geocode?location=701+First+Ave,+Sunnyvale,+CA&appid=MYAPIKEY");
xsl=loadXMLDoc("latitude.xsl");
// code for IE
if (window.ActiveXObject)
  {
  ex=xml.transformNode(xsl);
  document.getElementById("example").innerHTML=ex;
  }
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
  {
  xsltProcessor=new XSLTProcessor();
  xsltProcessor.importStylesheet(xsl);
  resultDocument = xsltProcessor.transformToFragment(xml,document);
  document.getElementById("example").appendChild(resultDocument);
  }
}
</script>
</head>
<body onload="displayResult()">
<div id="example" />
</body>
</html>

这是我的XSLT样式表:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
  <h2>Latitude Longitute finder</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th>Latitude</th>
      <th>Longitude</th>
    </tr>
    <tr>
      <td><xsl:value-of select="Result/latitude"/></td>
      <td><xsl:value-of select="Result/longitute"/></td>
    </tr>
  </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

从链接更新:雅虎回复

<?xml version="1.0" encoding="UTF-8"?>
<ResultSet version="1.0">
    <Error>0</Error>
    <ErrorMessage>No error</ErrorMessage>
    <Locale>us_US</Locale>
    <Quality>87</Quality>
    <Found>1</Found>
    <Result>
        <quality>87</quality>
        <latitude>37.416275</latitude>
        <longitude>-122.025092</longitude>
        <offsetlat>37.416397</offsetlat>
        <offsetlon>-122.025055</offsetlon>
        <radius>500</radius>
        <name></name>
        <line1>701 1st Ave</line1>
        <line2>Sunnyvale, CA  94089-1019</line2>
        <line3></line3>
        <line4>United States</line4>
        <house>701</house>
        <street>1st Ave</street>
        <xstreet></xstreet>
        <unittype></unittype>
        <unit></unit>
        <postal>94089-1019</postal>
        <neighborhood></neighborhood>
        <city>Sunnyvale</city>
        <county>Santa Clara County</county>
        <state>California</state>
        <country>United States</country>
        <countrycode>US</countrycode>
        <statecode>CA</statecode>
        <countycode></countycode>
        <uzip>94089</uzip>
        <hash>DDAD1896CC0CDC41</hash>
        <woeid>12797150</woeid>
        <woetype>11</woetype>
    </Result>
</ResultSet>
<!-- gws30.maps.re3.yahoo.com uncompressed/chunked Wed Jan 12 16:29:58 PST 2011 -->

2 个答案:

答案 0 :(得分:2)

鲍比,

即使输入XML错误或缺失,您的样式表也将始终输出一些HTML,至少是一个表。如果你甚至没有得到一个表,那么问题不在于输入XML是错误的还是缺失的;相反,加载或应用XSLT样式表有问题。确保样式表的URL正确无误。您有一个相对URL(“latitude.xsl”),因此请确保相对于您正在访问的页面的URL(而不是yahooapis页面),URL“latitude.xsl”可以访问样式表。

您也可以在xsl=loadXMLDoc("latitude.xsl");后尝试测试/提醒,以确保加载样式表。

(另外,'经度'在样式表中拼写错误,但在成功加载样式表之前,这个问题不会出现。)

答案 1 :(得分:0)

输入源清楚,您需要从

更改模式
<xsl:template match="/">

<xsl:template match="/ResultSet">