Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zamiana elementu w xml, problem z CDATA
pspgor
post
Post #1





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 27.02.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Crozin 5.08.2012, 12:32:28
Go to the top of the page
+Quote Post
pspgor
post
Post #3





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 27.02.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Zapewne w $_POST['id'] są jakieś śmieci poza liczbą zapisaną tekstem, np. jakaś zabłąkana spacja. Zrzutuj dane na typ INT.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 02:53