Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zamiana elementu w xml
Forum PHP.pl > Forum > PHP
pspgor
Witam. Chciałbym zamienić wartość elementu w pliku xml, wszystko szło dobrze do momentu elementu CDATA.

  1. <?php
  2. $plikxml = "plik.xml";
  3. $xml = simplexml_load_file($plikxml);
  4.  
  5. $xml->node[1]->title = '<![CDATA[<p>Sub</p><p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry</p>]]>';
  6. echo $xml->asXML(); // wyświetlenie
  7. ?>


Tym co się znają nie muszę chyba mówić, że kod CDATA został sparsowany co dało efekt zwykłego tekstu.

Nie mam pojęcia jak zrobić, by umieścić w tym kod CDATA. Jak dodawałem nowego noda posłużyłem się klasą podaną tutaj:

http://www.php.net/manual/en/simplexmlelem...hild.php#104458

ale nie potrafię zastosować tego do zmienienia elementu.

Z góry dziękuję, pozdrawiam wink.gif
Crozin
1. http://stackoverflow.com/questions/6260224...implexmlelement
2. Oszczędź sobie problemów z SimpleXML i potworków typu $xml->title = null; $xml->title->addCData('...'); i skorzystaj z czegoś w miarę normalnego, tj.: DOM. W połączeniu z xPathem korzysta się z tego równie wygodnie co z SimpleXML, a nie jesteś ograniczony ułomnością tego ostatniego.
pspgor
Wystąpiły drobne komplikacje.

  1. $id=$_POST['id'];
  2. class SimpleXMLExtended extends SimpleXMLElement
  3. {
  4. public function addCData($cdata_text)
  5. {
  6. $node = dom_import_simplexml($this);
  7. $no = $node->ownerDocument;
  8. $node->appendChild($no->createCDATASection($cdata_text));
  9. }
  10.  
  11. }
  12.  
  13. $xml = simplexml_load_file($plikxml,'SimpleXMLExtended');
  14. $xml->photo[$id]->description = NULL; // VERY IMPORTANT! We need a node where to append
  15. $xml->photo[$id]->description->addCData('Sasdasdas');
  16. echo $xml->asXML();


Występują błędy:

Notice: Indirect modification of overloaded element of SimpleXMLExtended has no effect
Notice: Trying to get property of non-object
Fatal error: Call to a member function addCData() on a non-object

Dodam, że jak usunę tutaj $id i podstawię liczby to działa.

Zmienna $id zwraca liczby.. sad.gif

ref

Podam może taki przykład.

Gdy mam tak:

  1. $xml->photo[2]->description = NULL;
  2. $xml->photo[2]->description->addCData('Sasdasdas');


Wszystko działa, lecz gdy zamiast 2 dam zmienną $id przetrzymującą wartość $_POST['id'] = 2 jest błąd. Mało tego, zmienna id przetrzymująca samą wartość 2 również działa.

  1. $xml->photo[$id]->description = NULL;
  2. $xml->photo[$id]->description->addCData('Sasdasdas');


$id = 2 - działa
$id = $_POST['id'] - nie działa
Crozin
Zapewne w $_POST['id'] są jakieś śmieci poza liczbą zapisaną tekstem, np. jakaś zabłąkana spacja. Zrzutuj dane na typ INT.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.