Tengo un archivo XML que contiene datos! [CDATA []]. Me gusta esto:

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

¡Ahora escuché que no puedo modificar los datos! [CDATA []] o que contienen algunos caracteres especiales. Pero ya no me acuerdo ... Esa es la razón por la que pregunto aquí.

¿Puedo cambiar los valores en! [CDATA []] y si es así, ¿cómo?

Solo quiero agregar algo como "? = Dadc" en el enlace.

Editar: Mi estructura de archivos XML (desea editar la 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>

Saludos

2
Jan 21 feb. 2017 a las 00:32

2 respuestas

La mejor respuesta

Eso es cierto para SimpleXML. Las secciones CDATA son un tipo especial de nodos de texto. En realidad, están aquí para hacer que las partes incrustadas sean más legibles para los humanos. SimpleXML realmente no maneja nodos XML, por lo que tendrá que dejar que los convierta en nodos de texto estándar.

Si tiene un fragmento JS o HTML en XML, es más fácil de leer si no se escapan los caracteres especiales como <. Y para eso están las secciones de CDATA (y cierta compatibilidad con versiones anteriores para los navegadores).

Por lo tanto, para modificar una sección CDATA y conservarla, deberá usar DOM. DOM realmente sabe acerca de los diferentes tipos de nodos. Aquí hay un pequeño ejemplo:

$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();

Salida:

<?xml version="1.0"?>
<link><![CDATA[https://google.de?abc]]></link>
4
ThW 20 feb. 2017 a las 21:57

¡Afortunadamente sí !, mira esto:

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

echo (string)$link;

PHP: ¿Cómo manejar

Saludos, Idir

0
Community 23 may. 2017 a las 11:53