Изменить! [CDATA []] в PHP? (XML)

У меня есть XML-файл, который содержит данные! [CDATA []]. Как это:

<link><![CDATA[https://google.de]]></link>

Теперь я слышал, что не могу изменить данные! [CDATA []] или что они содержат некоторые специальные символы. Но я уже не помню …
Вот почему я спрашиваю здесь.

Могу ли я изменить значения в! [CDATA []] и если да, то как?

Я просто хочу добавить что-то вроде «? = Dadc» по ссылке.

Редактировать:
Моя структура файла XML (хочу изменить URL):

<?xml version="1.0" encoding="UTF-8"?>
<rss>
<channel xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<title>Google Eur English 1</title>
<description/>
<item>
<title>Anno 2070</title>
<g:image_link><![CDATA[http://cdn.kinguin.net/media/catalog/category/anno_8.jpg]]></g:image_link>
<url><![CDATA[http://www.kinguin.net/category/4/anno-2070/?nosalesbooster=1&country_store=1&currency=EUR]]></url>
<price><![CDATA[3.88 EUR]]></price>
<platform>Uplay</platform>
</item>
</channel>
</rss>

Привет

2

Решение

Это верно для SimpleXML. Разделы CDATA — это особый вид текстовых узлов. Они на самом деле здесь, чтобы сделать встроенные детали более читабельными для людей. SimpleXML на самом деле не обрабатывает узлы XML, поэтому вам придется разрешить ему преобразовывать их в стандартные текстовые узлы.

Если у вас есть фрагмент JS или HTML в XML, его легче читать, если специальные символы, такие как < не избежали И это то, для чего предназначены разделы CDATA (и некоторая обратная совместимость для браузеров).

Таким образом, чтобы изменить раздел CDATA и сохранить его, вам придется использовать DOM. DOM на самом деле знает о различных типах узлов. Вот небольшой пример:

$xml = '<link><![CDATA[https://google.de]]></link>';

$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);

foreach ($xpath->evaluate('//link/text()') as $linkValue) {
$linkValue->data .= '?abc';
}
echo $document->saveXml();

Выход:

<?xml version="1.0"?>
<link><![CDATA[https://google.de?abc]]></link>
3

Другие решения

К счастью, да !, проверьте это:

$link = simplexml_load_string(
'<link><![CDATA[Hello, world!]]></link>'
);

echo (string)$link;

PHP: как справиться <! [CDATA [с SimpleXMLElement?

С Уважением,
Idir

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector