Как вывести XML-строку из PHP

#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 .