Anzeige - [Hier werben / Mediadaten]
(?) Tags raten (?) cdata, parsen, xml (edit)
 
Reply to this topicStart new topicStart Poll
> XML Parsen, CDATA ignorieren, XML Parsen, CDATA ignorieren
Pony
Geschrieben am: Do 7.09.2006, 09:39
Report PostQuote Post

AyomRank 1
**

Gruppe: Member (inaktiv)
Beiträge: 1
Mitglied seit: 7.09.2006


Hallo.

Dank dieser tollen Seite habe ich nun einen einfachen Weg gefunden mit PHP XML in Arrays umzuwandeln. Ich bin nicht ganz der Könner, so war das vorher eine Art Buch mit 7 Siegeln.

Es handelt sich hier rum: http://www.ayom.com/faq/wie-parse-ich-xml-mit-php-a-208.html

Das Funktioniert sehr gut. Allerdings wandelt die Function auch <![CDATA[ ... ]]>-Tags um. Nun wollte ich fragen ob und wie man die Function anpassen kann, sodass <![CDATA[]]> ignoriert wird und komplett in den Array kommt? Kann jemand helfen, eventuell auch mit einer entsprechenden Code-Zeile?

Wink
Top
PMEmail Poster
Top
 
 
Joel
Enzian Media GmbH
#2 Geschrieben am: Do 7.09.2006, 11:23 (+01:43)
Report PostQuote Post

AyomRank 7
**************

Gruppe: Member (aktiv)
Beiträge: 1441
Mitglied seit: 17.06.2004


Viel einfacher und besser ist das SimpleXML von PHP 5.

http://www.php.net/SimpleXML

Jedenfalls Standard-PHP und benötigt keine zusätzliche Software! Wandelt ein XML in eine Objekt-Struktur um!


--------------------
EagleFind.com - Die visuelle Suchmaschine
Enzian Media bietet Entwicklung von Websites, Videos und Webcam-Streaming.

Suxedoo- Werbekampagne im Wert von 5000.- jetzt Gewinnen! Nur für im Handelsregister eingetragene Frimen!
Top
PMUsers WebsiteICQ
Top
 
Maik
power-labels AG
#3 Geschrieben am: Do 7.09.2006, 11:37 (+00:14)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 484
Mitglied seit: 16.03.2006


Eine andere Möglichkeit wäre DOM:
http://www.php.net/manual/de/ref.dom.php

Das gibt es schon seit PHP4

Ein ersatz für xml2array wäre zB:
CODE

function DOMxml2array($n) {
  $return=array();
 
  foreach($n->childNodes as $nc)
   ($nc->hasChildNodes())
   ?($n->firstChild->nodeName== $n->lastChild->nodeName&&$n->childNodes->length>1)
   ?$return[$nc->nodeName][]=xml2array($item)
   :$return[$nc->nodeName]=xml2array($nc)
   :$return=$nc->nodeValue;

  return $return;
}


Aber eigentlich ist man besser dran, wenn man es nicht erst zum Array umwandelt, sondern gleich mit DOM-Funktionen arbeitet.

DOMxml2array kannst du zB. so verwenden:
CODE

$xml= new DOMDocument();
$xml->preserveWhiteSpace=false;
$xml->loadXML($xmlcode);
print_r(DOMxml2array($xml));


Wobei $xmlcode ein String ist, der XML-Daten enthält.
Oder:
CODE

$xml= new DOMDocument();
$xml->preserveWhiteSpace=false;
$xml->load($filename);
print_r(DOMxml2array($xml));


wobei $filename den Dateinamen der XML-Datei einthalten sollte.

Das Problem mit CData hat sich dann auch erledigt. Allerdings ist der Ergebnis immer in UTF-8 und die XML-Entities sind bereits konvertiert.


--------------------
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Tim Blog
#4 Geschrieben am: Do 7.09.2006, 12:11 (+00:33)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 297
Mitglied seit: 24.03.2005


Hallo Maik,

ich wollte das ganze gerade auch mal ausprobieren aber bekomme bei diesem snippet

CODE
<?php
function DOMxml2array($n) {
 $return=array();

 foreach($n->childNodes as $nc)
  ($nc->hasChildNodes())
  ?($n->firstChild->nodeName== $n->lastChild->nodeName&&$n->childNodes->length>1)
  ?$return[$nc->nodeName][]=xml2array($item)
  :$return[$nc->nodeName]=xml2array($nc)
  :$return=$nc->nodeValue;

 return $return;
}

$xml= new DOMDocument();
$xml->preserveWhiteSpace=false;
$xml->load($url);
print_r(DOMxml2array($xml));
?>


Immer folgende Fehlermeldung:
QUOTE
Call to undefined function: load()
wo muss ich die Funktion load() denn vorher definieren bzw. wie müsste das aussehen.

1000Fragen wink.gif

vielen Dank


--------------------
Top
PMEmail PosterUsers Website
Top
 
Joel
Enzian Media GmbH
#5 Geschrieben am: Do 7.09.2006, 12:14 (+00:03)
Report PostQuote Post

AyomRank 7
**************

Gruppe: Member (aktiv)
Beiträge: 1441
Mitglied seit: 17.06.2004


Falls du PHP 5 hast, probier mal das. Wandelt SimpleXML in ein Array um:

QUOTE

function simplexml2array($xml) {
  if (get_class($xml) == 'SimpleXMLElement') {
      $attributes = $xml->attributes();
      foreach($attributes as $k=>$v) {
          if ($v) $a[$k] = (string) $v;
      }
      $x = $xml;
      $xml = get_object_vars($xml);
  }
  if (is_array($xml)) {
      if (count($xml) == 0) return (string) $x; // for CDATA
      foreach($xml as $key=>$value) {
          $r[$key] = simplexml2array($value);
      }
      if (isset($a)) $r['@'] = $a;    // Attributes
      return $r;
  }
  return (string) $xml;
}


--------------------
EagleFind.com - Die visuelle Suchmaschine
Enzian Media bietet Entwicklung von Websites, Videos und Webcam-Streaming.

Suxedoo- Werbekampagne im Wert von 5000.- jetzt Gewinnen! Nur für im Handelsregister eingetragene Frimen!
Top
PMUsers WebsiteICQ
Top
 
Tim Blog
#6 Geschrieben am: Do 7.09.2006, 12:34 (+00:19)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 297
Mitglied seit: 24.03.2005


Habe leider nur PHP 4.4.4, damit wird das nicht gehen?

Trotzdem vielen Dank


--------------------
Top
PMEmail PosterUsers Website
Top
 
Maik
power-labels AG
#7 Geschrieben am: Do 7.09.2006, 18:39 (+06:04)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 484
Mitglied seit: 16.03.2006


DOM XML von PHP4 ist etwas anders als DOM von PHP5

Ich kann es nicht testen, aber vielleicht geht es so:
CODE

<?php
function DOMxml2array($n) {
$return=array();

foreach($n->childNodes as $nc)
 ($nc->hasChildNodes())
 ?($n->firstChild->nodeName== $n->lastChild->nodeName&&$n->childNodes->length>1)
 ?$return[$nc->nodeName][]=xml2array($item)
 :$return[$nc->nodeName]=xml2array($nc)
 :$return=$nc->nodeValue;

return $return;
}

if ($xml = domxml_open_file($url)) {
   print_r(DOMxml2array($xml->document_element));
}
?>


--------------------
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/13759

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
Parsen einer Textdatei in PHP Sonntagskind3 1292 7 Sa 18.11.2006, 00:13
Wikipedia XML Dump parsen markuswaibel 1017 0 Do 6.07.2006, 13:43
XML mit php parsen? freakx0 1040 7 Mo 3.04.2006, 20:18
xml parsen mit php Florian 774 3 Di 1.02.2005, 00:07
Variablen in Template Parsen (eval) Alain Aubert 715 14 So 10.10.2004, 10:00
XML Parser/parsen Diego 641 3 Do 7.10.2004, 13:08
XML-> XSLT Ausgabe erneut parsen Ghostrider 739 0 Fr 13.08.2004, 17:32
www.xxx.ch zu url parsen? j0sh 1448 2 Mi 23.06.2004, 15:52




Anzeige - [Hier werben / Mediadaten]



Anzeigen


[Hier werben / Mediadaten]