#php #xml
#php #xml
Вопрос:
Я беру XML-строку и редактирую ее в PHP, чтобы окончательно вывести отредактированную XML-строку при обращении к PHP-файлу. Я пробовал как echo, так и print для вывода XML-документа, но он печатает данные только в самых внутренних тегах. Я хочу, чтобы это функционировало так, как если бы вы напрямую загрузили XML-документ, такой как test.com/example.xml . Вместо этого выводится только часть строки, а не все целиком. Инструкция print приведена ниже. Есть какие-нибудь советы?
Печать <kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
<Style id="undecorated_style">
<BalloonStyle>
<displayMode>undecorated</displayMode>
</BalloonStyle>
</Style>
<Placemark>
<name>Relative Marker Example</name>
<description><![CDATA[
<div style="position: absolute; width: 100px; height: 100px; left: -50px; top: -50px"><img width="100px" height="100px" src="http://argonapps.gatech.edu/examples/FrameMarkerThin_005.png"/></div>
]]>
</description>
<balloonVisibility>1</balloonVisibility>
<Marker>
<markerType>framesimpleid</markerType>
<markerId>-1</markerId> <!-- integer value (-1 means follow any marker of markerType) -->
<locationMode>relative</locationMode> <!-- default (ignore), relative (update location), fixed (update camera) -->
<orientationMode>fixed</orientationMode>
<scale>
<x>0.076</x> <!-- test marker is 0.038 meters -->
<y>0.076</y>
<z>0.076</z>
</scale>
</Marker>
<styleUrl>#undecorated_style</styleUrl>
</Placemark>
‘;
Открытие файла в браузере показывает только:
Пример относительного маркера ]]> 1 framesimpleid -1 относительное исправленное значение 0.076 0.076 0.076 #undecorated_style
вместо простого xml.
Ответ №1:
Перед печатью добавьте заголовок типа содержимого.
Либо
header('Content-type: text/xml');
или более подходящий для KML
header('Content-type: application/vnd.google-earth.kml xml');
Если вы хотите просмотреть ее в браузере как исходный код, прочитайте это: http://www.w3schools.com/xml/xml_view.asp
Вы также можете принудительно отобразить ее в виде текста, добавив
header('Content-type: text/plain');
Комментарии:
1. Спасибо за ответ. Браузер теперь отображает только: Пример относительного маркера без изменений 1 framesimpleid -1 исправлено относительное значение 0.076 0.076 0.076 #undecorated_style
2. Вау! Большое вам спасибо. Второй заголовок, который вы предоставили, работает.
Ответ №2:
Вероятно, это потому, что ваш браузер пытается отобразить XML (аналогично тому, как он загружает HTML, вы просто видите содержимое, а не теги).
Если вы выполните команду «Просмотреть исходный код» в своем браузере, вы должны увидеть необработанный XML.
Вы всегда можете изменить теги на < и >, чтобы они отображались в виде текста
print htmlentities('<Placemark>.....</Placemark>');
Ответ №3:
Перед echo
обработкой выходных данных вы должны сначала отправить правильный заголовок для XML-данных:
header("Content-type: text/xml");
// Or
header("Content-type: application/xml");
РЕДАКТИРОВАТЬ: Обратите внимание, что ваш браузер, вероятно, по-прежнему будет отображать только внутренний текст. Просмотрите исходный код страницы, чтобы увидеть ваш XML-файл.
Комментарии:
1. @vartec tools.ietf.org/html/rfc3023#section-3.2 Хотя я бы использовал
text/xml
сам, я думаю,application/xml
это тоже сработает.2. вот почему я удалил свой комментарий. Хотя на практике не видел
application/xml
.