PHP: Как начать работать в файле загрузки simplexml() var


Я загружаю xml в php с помощью simplexml_load_file().

Я загружаю файл с этим:

$xml = simplexml_load_file('flash/datas/datas.xml');

И доступ к моему контенту таким образом:

$descText = $xml->aboutModule->chocolaterie->desc

Текст из desc хорошо зарегистрирован в моем $DESCTEXT, но все <br/> текста исчезают... Так что мой длинный текст в одной строке, не очень хороший:-/

Вы знаете, как это решить? Есть ли какая-то особая черта для выполнения одного из $xml var? Или что-то еще?

Заранее благодарю вас за вашу помощь!

Author: jadarnel27, 2010-05-10

4 answers

Два способа заставить это работать.

Правильный

Не не храните эти <br/>. Храните реальные фактические новые строки, например

<desc>
    Line 1.
    Line 2.
</desc>

Затем используйте nl2br() для замены новых строк тегами HTML. Это предполагает, что ваше описание обычно не содержит разметки. Если это так, используйте разделы CDATA, как предложено в другом ответе.

другой один

$descText = strip_tags($xml->aboutModule->chocolaterie->desc->asXML(), '<br /><br/>');
 4
Author: Josh Davis, 2010-05-10 14:01:25

Взгляните на это.

Есть способ вернуть HTML-теги. Например:

<?xml version="1.0"?>
<intro>
    Welcome to <b>Example.com</b>!
</intro>

Это PHP-код:

<?php
// I use @ so that it doesn't spit out content of my XML in an
// error message if the load fails. The content could be
// passwords so this is just to be safe.
$xml = @simplexml_load_file('content_intro.xml');
if ($xml) {
    // asXML() will keep the HTML tags but it will also keep the parent tag <intro> so I strip them out with a str_replace. You could obviously also use a preg_replace if you have lots of tags.
    $intro = str_replace(array('<intro>', '</intro>'), '', $xml->asXML());
} else {
    $error = "Could not load intro XML file.";
}
?>
 1
Author: Cristian, 2010-05-10 13:51:49

Если у вас есть контроль над исходным XML, возможно, вам будет лучше хранить описание в виде символьных данных, т.Е. в оболочке CDATA, а не смешивать ваш XML с HTML.

Например, вместо:

...
<desc>
    This is a description<br /> with a break in it
</desc>
...

...сделайте что-нибудь вроде:

...
<desc>
<![CDATA[
    This is a description<br /> with a break in it
]]>
</desc>

Но если вы этого не сделали, то, как говорит Casidiablo, вам придется захватить содержимое элемента <desc> в формате XML.

 1
Author: Matt Gibson, 2010-05-10 13:56:08

Лучше вы можете использовать следующий код для замены тегов BR на новые символы строки.

preg_replace("/(\s*)+/", "\n", $input);

ИЛИ

Вы можете преобразовать содержимое описания в "htmlentities", а затем вернуться к "htmlspecialchars"

 0
Author: Prabhu M, 2010-05-10 14:26:12