在PHP中读取KML-File,强制它在一行中,用parseKMLString解析谷歌地图

时间:2014-09-26 09:50:00

标签: javascript php xml google-maps kml

我试图用PHP解析KML文件并使用JavaScript解析它。到目前为止,我已尝试过不同的方法。我的问题是,我似乎无法从“xml”中删除每个换行符。使用以下方法,我可以在一行中强制所有XML,但无法从“<![CDATA[....

中删除空格
$dom = new DOMDocument();

$dom->preserveWhitespaces = false;
$dom->load("FILE-URL goes here");
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//text()') as $domText) {
    $domText->data = trim(str_replace("\r\n","",$domText->nodeValue));
}
$dom->formatOutput = true;
$string = $dom->saveHTML();

在我的下一次尝试中,我能够将所有内容转换为字符串,但无法从中删除任何换行符:

$xml = simplexml_load_file("FILE-URL goes here", 'SimpleXMLElement', LIBXML_NOCDATA);
$string = (string)$xml->asXML();
print_r(trim(preg_replace("/\r\n\t+/","",$string)));

删除中断对于执行以下JS代码是必要的:

geoXml.parseKmlString('<?php print(STRING FROM ABOVE) ?>');

不幸的是我无法将文件下载到服务器上,因此我必须遵守上述内容。我也不能使用PHP来显示地图。 KML文件本身是一个普通的Google-Maps-KML文件。

1 个答案:

答案 0 :(得分:1)

preg_replace中的正则表达式正在查找特定的空格字符串:

preg_replace("/\r\n\t+/","",$string);

我很确定你想要找到这些字符,即

preg_replace("/[\r\n\t+]/", "", $string);

您还可以将str_replace与您正在寻找的空白实体数组一起使用:

$ws = array("\r", "\n", "\t");
$newstr = str_replace($ws, "", $string);

除非速度是一个问题,否则正则表达式更灵活。