Javascript 将XPath foreach用于Google地图地理编码器

Javascript 将XPath foreach用于Google地图地理编码器,javascript,php,google-maps,xpath,rss,Javascript,Php,Google Maps,Xpath,Rss,我正在使用GoogleMapsAPI进行数据可视化,显示rss提要中的位置。 我已经设法让地图和rss位置正常工作,但我很难在地图中找到位置 这是提要的摘录: <rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"> <channel> <title>Alarmeringen.nl feed</title> <link>http://

我正在使用GoogleMapsAPI进行数据可视化,显示rss提要中的位置。 我已经设法让地图和rss位置正常工作,但我很难在地图中找到位置

这是提要的摘录:

<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>Alarmeringen.nl feed</title>
        <link>http://alarmeringen.nl</link>
        <description>Alarmeringen.nl: Alle alarmeringen voor: Amsterdam-Amstelland</description>
        <atom:link href="http://alarmeringen.nl/feeds/region/amsterdam-amstelland/brandweer.rss"
            rel="self"/>
        <language>nl-NL</language>
        <lastBuildDate>Wed, 11 Jun 2014 16:46:42 +0200</lastBuildDate>
        <item>
            <title>HV 2 LIFTOPSLUITING (+Inc.net: Reg.Inmeld+) , Talbotstraat 47 AMSTERDAM [ ASZ
                ]</title>
            <link>http://alarmeringen.nl/amsterdam-amstelland/amsterdam/15757258/p2000-assistentie-bij-liftopsluiting-op-talbotstraat-in-amsterdam-brandweer-hulpverlening-ter-plaatse.html</link>
            <description>Assistentie bij liftopsluiting op Talbotstraat in Amsterdam, brandweer
                hulpverlening ter plaatse</description>
            <pubDate>Wed, 11 Jun 2014 16:46:42 +0200</pubDate>
            <guid>d5ae65f5049871959f15130ceb06bf2f</guid>
        </item>

        <!-- .. many more items ... --> 

        <item>
            <title>BR 1 BRAND WONING (+Inc.net: 2+) (KEUKEN) (WOONHUIS) (SLACHTOFFERS: ) ,
                Anfieldroad 228 AMSTERDAM [ OVDN VVD ]</title>
            <link>http://alarmeringen.nl/amsterdam-amstelland/amsterdam/15755472/p2000-woningbrand-op-anfieldroad-in-amsterdam-brandweer-met-spoed-ter-plaatse.html</link>
            <description>Woningbrand op Anfieldroad in Amsterdam, brandweer met spoed ter
                plaatse</description>
            <pubDate>Wed, 11 Jun 2014 13:28:07 +0200</pubDate>
            <guid>ad9a2c0586db794415588e2b4e50375a</guid>
        </item>
    </channel>
</rss>
更新

这是我用来在地图上显示地址的JavaScript代码:

function initialize()
{
    geocoder = new google.maps.Geocoder();
    var myLatlng = new google.maps.LatLng(52.37022, 4.89517);
    var mapOptions = {
        zoom: 11,
        center: myLatlng,
        mapTypeControl:         true,
        mapTypeControlOptions:  {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
        navigationControl:      true,
        mapTypeId:              google.maps.MapTypeId.ROADMAP
    }

    var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
    if (geocoder)
    {
        geocoder.geocode(
            {
                'address': address    // The variable is used here
            },

            function(results, status)
            {
                if (status == google.maps.GeocoderStatus.OK)
                {
                    if (status != google.maps.GeocoderStatus.ZERO_RESULTS)
                    {
                        map.setCenter(results[0].geometry.location);
                        var infowindow = new google.maps.InfoWindow(
                            {
                                content: '<b>' + address + '</b>',
                                size: new google.maps.Size(150, 50)
                            });

                        var marker = new google.maps.Marker(
                            {
                                position: results[0].geometry.location,
                                map: map,
                                title:address
                            });

                        google.maps.event.addListener(marker, 'click', function()
                        {
                            infowindow.open(map,marker);
                        });

                    }
                    else
                    {
                        alert('No results found');
                    }
                }
                else
                {
                    alert('Geocode was not successful for the following reason: ' + status);
                }
            }
        );
    }
}
函数初始化()
{
geocoder=新的google.maps.geocoder();
var mylatng=newgoogle.maps.LatLng(52.37022,4.89517);
变量映射选项={
缩放:11,
中心:myLatlng,
mapTypeControl:true,
mapTypeControlOptions:{style:google.maps.MapTypeControlStyle.DROPDOWN_MENU},
导航控制:对,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
var map=new google.maps.map(document.getElementById('map-canvas'),mapOptions);
if(地理编码器)
{
地理编码(
{
“地址”:地址//此处使用变量
},
功能(结果、状态)
{
if(status==google.maps.GeocoderStatus.OK)
{
if(status!=google.maps.GeocoderStatus.ZERO\u结果)
{
map.setCenter(结果[0].geometry.location);
var infowindow=new google.maps.infowindow(
{
内容:''+地址+'',
尺寸:新谷歌。地图。尺寸(150,50)
});
var marker=new google.maps.marker(
{
位置:结果[0]。geometry.location,
地图:地图,
标题:地址
});
google.maps.event.addListener(标记'click',函数()
{
信息窗口。打开(地图、标记);
});
}
其他的
{
警报(“未找到结果”);
}
}
其他的
{
警报('地理编码因以下原因未成功:'+状态);
}
}
);
}
}

您似乎想要生成将在客户端使用的JavaScript变量。您正在选择许多对象。我会假设你希望它们都能提供。一种方法是生成代码,用JavaScript创建一个数组,并将每个字符串作为数组的一个元素

您还可以使用XPath提取
标题
内容中的字符串。我在下面的示例中使用了不同但等效的方法:

<?php 
    $document = new DOMDocument(); 
    $xml = $document->load('http://alarmeringen.nl/feeds/region/amsterdam-amstelland/brandweer.rss');
    $xpath = new DOMXpath($document);
    $titles = $xpath->evaluate('//title');

    echo '<script>'."\n";
    echo '    var addresses = new Array(); '."\n";

    $count = 0;
    foreach($titles as $title) {
        $variable = $xpath->evaluate('normalize-space(substring-after(substring-before(text(), " ["), ", "))', $title);
        if ($variable != '') {
            echo '    addresses['.$count++.'] = "'.$variable.'";'."\n";
        }
    }
    echo '</script>'."\n";
?>
从结果中可以看出,它在地图上放置了一个表示该地址的标记


如果您需要同时在地图中放置多个标记,我建议您查看以下问题/答案:

似乎您希望生成将在客户端使用的JavaScript变量。您正在选择许多对象。您希望如何将它们全部放在一个变量中?会是数组吗?谢谢你的回复。但现在我得到了“零结果”的信息。我仍然无法在用于在地图上显示地址的变量中获取地址。在我看来,源可能已更改。它似乎是动态的。我把它放在这个可以测试的地方。我只是将
替换为
,这样您就可以看到结果(并避免任何代码删除)。我知道代码中发生了什么,但我仍然不知道如何获取数组中的地址以显示在地图上。我添加了一个小提琴,显示如何在地图上获取一个地址。
function initialize()
{
    geocoder = new google.maps.Geocoder();
    var myLatlng = new google.maps.LatLng(52.37022, 4.89517);
    var mapOptions = {
        zoom: 11,
        center: myLatlng,
        mapTypeControl:         true,
        mapTypeControlOptions:  {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
        navigationControl:      true,
        mapTypeId:              google.maps.MapTypeId.ROADMAP
    }

    var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
    if (geocoder)
    {
        geocoder.geocode(
            {
                'address': address    // The variable is used here
            },

            function(results, status)
            {
                if (status == google.maps.GeocoderStatus.OK)
                {
                    if (status != google.maps.GeocoderStatus.ZERO_RESULTS)
                    {
                        map.setCenter(results[0].geometry.location);
                        var infowindow = new google.maps.InfoWindow(
                            {
                                content: '<b>' + address + '</b>',
                                size: new google.maps.Size(150, 50)
                            });

                        var marker = new google.maps.Marker(
                            {
                                position: results[0].geometry.location,
                                map: map,
                                title:address
                            });

                        google.maps.event.addListener(marker, 'click', function()
                        {
                            infowindow.open(map,marker);
                        });

                    }
                    else
                    {
                        alert('No results found');
                    }
                }
                else
                {
                    alert('Geocode was not successful for the following reason: ' + status);
                }
            }
        );
    }
}
<?php 
    $document = new DOMDocument(); 
    $xml = $document->load('http://alarmeringen.nl/feeds/region/amsterdam-amstelland/brandweer.rss');
    $xpath = new DOMXpath($document);
    $titles = $xpath->evaluate('//title');

    echo '<script>'."\n";
    echo '    var addresses = new Array(); '."\n";

    $count = 0;
    foreach($titles as $title) {
        $variable = $xpath->evaluate('normalize-space(substring-after(substring-before(text(), " ["), ", "))', $title);
        if ($variable != '') {
            echo '    addresses['.$count++.'] = "'.$variable.'";'."\n";
        }
    }
    echo '</script>'."\n";
?>
<script>
    var addresses = new Array(); 
    addresses[0] = "Louis Couperusstraat 16 AMSTERDAM";
    addresses[1] = "Transformatorweg 28 AMSTERDAM";
    addresses[2] = "Kolfschotenstraat 4 AMSTERDAM ZUIDOOST";
    addresses[3] = "H.J.E. Wenckebachweg 48 AMSTERDAM Gevangenissen";
    addresses[4] = "Pieter Lastmankade 168 AMSTERDAM";
    addresses[5] = "Fiatstraat 1 AMSTERDAM";
    addresses[6] = "Boterdijk UITHOORN";
    addresses[7] = "Nieuwezijds Voorburgwal 130 AMSTERDAM";
    addresses[8] = "Nieuwezijds Voorburgwal 130 AMSTERDAM";
    addresses[9] = "Fiatstraat 1 AMSTERDAM";
    addresses[10] = "David Blesstraat 12 AMSTERDAM";
</script>
 var address = addresses[0];