WinFuture-Forum.de: Hilfestellung bei PHP-Klasse array2xml für Erweiterung um DOMDocument: - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Hilfestellung bei PHP-Klasse array2xml für Erweiterung um DOMDocument: Wie Klasse umschreiben, um Inhalte in CDATA-Elemente einzbetten


#1 Mitglied ist offline   daarg 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.212
  • Beigetreten: 30. November 11
  • Reputation: 4
  • Geschlecht:Männlich

  geschrieben 08. Februar 2011 - 14:27

Hallo Newsgroup,

vielleicht gibt einen Crack unter Euch der mir helfen kann?

Ich muss (mehrdimensionale) Arrays in XML umwandeln können. Eine funktionierende Klasse habe ich bereits gefunden - allerdings müssten meine Inhalte in CDATA-Elemente eingebetet sein.

Als Basis verwende ich die Klasse:
http://www.phpro.org/classes/PHP-Recursive...L-With-DOM.html

Als Beispiel verwende ich den Array:
$user['name'] = 'testuser';
$user['firstname'] = 'JohX';
$user['lastname'] = 'Doe';
$user['location'] = 'Zürich';
$user['country'] = 'Switzerland';
$user['language'] = 'de';
$user['data']['a'] = 'dadsfadsf';
$user['data']['b'] = 'asdf asdf';
$user['data']['c'] = 'sadfad';


Was folgende XML-String ergibt:
<?xml version="1.0" encoding="UTF-8"?>
<user>
  <name>testuser</name>
  <country>Switzerland</country>
  <language>de</language>
  <data><a>dadsfadsf</a><b>asdf asdf</b><c>sadfad</c></data>
</user>


Wie muss ich vorgehen um die Text in CDATA-Elemente einzubetten - es ist mir klar das dies mit der Methode DOMDocument::createCDATASection geschehen sollte - ich finde jedoch keinen Ansatz wie ich diese verwenden/einsetzen soll?

Bsp:
<?xml version="1.0" encoding="UTF-8"?>
<user>
  <name><![CDATA[testuser]]></name>
  <country><![CDATA[Switzerland]]></country>
  <language><![CDATA[de]]></language>
  <data><a><![CDATA[dadsfadsf]]></a><b><![CDATA[asdf asdf]]></b><c>sadfad]]></c></data>
</user>


Um Hilfestellung oder Tipps wäre ich dankbar :D

// CH
as wolves among sheep we have wandered [bathory, dis irae]
0

Anzeige



#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 08. Februar 2011 - 14:49

http://php.net/manua...datasection.php

Die Stelle musst du anpassen:
			$child = $this->createElement($element, (is_array($value) ? null : $value));
			$node->appendChild($child);

$value musst du vorher durch die o.g. Methode laufen lassen.

Dieser Beitrag wurde von Witi bearbeitet: 08. Februar 2011 - 14:54

0

#3 Mitglied ist offline   daarg 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.212
  • Beigetreten: 30. November 11
  • Reputation: 4
  • Geschlecht:Männlich

geschrieben 08. Februar 2011 - 15:27

ja - soweit bin ich jetzt auch - nur hab ich mit der Syntax Mühe - hast Du hierzu evtl. ein Bsp.?

// CH
as wolves among sheep we have wandered [bathory, dis irae]
0

#4 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 08. Februar 2011 - 15:36

voilà!
$child = $this->createElement($element, (is_array($value) ? null : $this->createCDATASection($value)));

0

#5 Mitglied ist offline   daarg 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.212
  • Beigetreten: 30. November 11
  • Reputation: 4
  • Geschlecht:Männlich

geschrieben 08. Februar 2011 - 15:59

Hallo Witi,

wenn ich
$child = $this->createElement($element, (is_array($value) ? null : $value));
mit
$child = $this->createElement($element, (is_array($value) ? null : $this->createCDATASection($value)));
austausche erhalte ich folgenden Fehler:

 PHP Catchable fatal error:  Argument 1 passed to DOMNode::appendChild() must be an instance of DOMNode, null given, called in /srv/www/HOST/DocRoot/CMS/examples/usr/xml2array.php on line 43 and defined in /srv/www/HOST/DocRoot/CMS/examples/usr/scripts/ArrayToXML.Class.php on line 58


Zeile 58 ist enhält die Änderungen die Du vorschlägst?

Dieser Beitrag wurde von CaptHowdy bearbeitet: 08. Februar 2011 - 15:59

as wolves among sheep we have wandered [bathory, dis irae]
0

#6 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 08. Februar 2011 - 16:07

Hoppla...createCDATASection liefert ja gar keinen String. Also musst du das wie folgt ändern:

			$child = $this->createElement($element);

			if (!is_array($value)) {
				$child->appendChild($this->createCDATASection($value));
			}

			$node->appendChild($child);

0

#7 Mitglied ist offline   daarg 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.212
  • Beigetreten: 30. November 11
  • Reputation: 4
  • Geschlecht:Männlich

geschrieben 08. Februar 2011 - 16:15

Hallo Witi - dankeschön - heut seh ich irgendwie kaum bis zum Monitor :D Nun klappts.
as wolves among sheep we have wandered [bathory, dis irae]
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0