Я пытаюсь проанализировать KML-файл в PHP и разобрать его с помощью 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-файлом.
Ваше регулярное выражение в 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);
Если скорость не является проблемой, регулярное выражение является более гибким.
Других решений пока нет …