【发布时间】:2014-02-26 08:50:19
【问题描述】:
我正在尝试创建一个在谷歌地图上显示 personell 的 html 页面。为了在地图上创建不同的标记,我有一个 javascript,它为数组位置中的每个条目创建一个标记。该数组应该填充来自 db(在 xml 中)的数据,并且必须转换为我的 html。
请看一下我的 xsl:
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=AIzaSyB1tbIAqN0XqcgTR1-FxYoVTVq6Is6lD98&sensor=false"></script>
<script type="text/javascript">
var infos = [];
var locations = [
<xsl:apply-templates select='//rows'/>
];
function initialize() {
var myOptions = {
center: new google.maps.LatLng(50.59, 4.35),
zoom: 8,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("default"),myOptions);
setMarkers(map,locations)
}
function setMarkers(map,locations){
var marker, i
for (i = 0; i < locations.length; i++)
{ var name = locations[i][0]
var long = locations[i][1]
var lat = locations[i][2]
var contentmarker = locations[i][3]
latlngset = new google.maps.LatLng(lat, long);
var marker = new google.maps.Marker({
map: map, title: name , position: latlngset
});
map.setCenter(marker.getPosition())
var content = contentmarker
var infowindow = new google.maps.InfoWindow()
google.maps.event.addListener(marker,'click', (function(marker,content,infowindow){
return function() {
/* close the previous info-window */
closeInfos();
infowindow.setContent(content);
infowindow.open(map,marker);
/* keep the handle, in order to close it on next click event */
infos[0]=infowindow;
};
})(marker,content,infowindow));
}
}
function closeInfos(){
if(infos.length > 0){
/* detach the info-window from the marker ... undocumented in the API docs */
infos[0].set("marker", null);
/* and close it */
infos[0].close();
/* blank the array */
infos.length = 0;
}
}
</script>
</head>
<body onload="initialize()">
<div id="default" style="width:100%; height:100%"></div>
</body>
</html>
</xsl:template>
<xsl:template match='rows'>
<xsl:for-each-group select='row' group-by='@SiteNr'>
['<xsl:value-of select='@SiteName'/>', '<xsl:value-of select='@LON_R'/>', '<xsl:value-of select='@LAT_R'/>
', '<b><xsl:value-of select='@RegionName'/></b><br>Details (<xsl:value-of select='@SiteNr'/>):
<table border='1'>
<tr>
<th>PersNr</th>
<th>Name</th>
<th>Firstname</th>
<th>DeptNr</th>
<th>DeptName</th>
<th>PostNr</th>
</tr>
<xsl:for-each select="current-group()">
<xsl:apply-templates select="."/>
<tr>
<td><xsl:value-of select="@PersNr"/></td>
<td><xsl:value-of select="@Name"/></td>
<td><xsl:value-of select="@FirstName"/></td>
<td><xsl:value-of select="@DeptCode"/></td>
<td><xsl:value-of select="@DeptName"/></td>
<td><xsl:value-of select="@PostNr"/></td>
</tr>
</xsl:for-each>
<tr>
<td colspan='5'>TOTAAL</td>
<td align='center'><xsl:value-of select="(count(current-group()/@PersNr))"/></td>
</tr>
</table>']
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
如果我在脚本周围尝试 CDATA,它会运行,但我的脚本标签会用 进行转换,并且脚本不再工作。
我的 xml 的摘录:
<rows>
<row PersNr="B15975" Name="Vandendriessche" Firstname="Rudolf" DeptCode"J20100" DeptName="HR" Post="1230" RegionNum="3" RegionName="Plateau Berlaar" SiteNum="11002D" SiteName="KW BELGIELEI" LON_kw="4.418" LAT_kw="51.205" />
我是 XSL/HTML/JAVASCRIPT 的新手,所以如果你知道答案,请帮助我,提供一些额外的信息(如果你能提供的话)。
【问题讨论】:
-
您能否展示更多的 XSLT 而不是仅仅在中间截断它(特别是匹配 rows 的模板和 xsl:apply-templates 之后的 javascript )。此外,显示您的输入 XML 可能会有所帮助。谢谢!
标签: javascript html xml xslt