我在这里尝试使用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 -->
答案 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">