2011-01-03 11 views
0

Ich habe eine Art von ... XML-Dokument wie folgt:php, regex, xml

<file src="136090000-136100000"> 
    <member id="136090000"> 
     <Name> 
       <![CDATA[DOSEKUN DANIEL ADETUNJI]]> 
       </Name> 
     <Email> 
       <![CDATA[[email protected]]]> 
       </Email> 
     <DateRegistration> 
       <![CDATA[10/19/2010 8:46:57 PM]]> 
       </DateRegistration> 
    </Member> 
    <usafisMember id="136090001"> 
     <Name> 
       <![CDATA[yoleida colina]]> 
       </Name> 
     <Email> 
       <![CDATA[[email protected]]]> 
       </Email> 
     <DateRegistration> 
       <![CDATA[10/19/2010 8:47:08 PM]]> 
       </DateRegistration> 
    </usafisMember> 
    <usafisMember id="136090002"> 
     <Name> 
       <![CDATA[Homero Valdovinos]]> 
       </Name> 
     <Email> 
       <![CDATA[[email protected]]]> 
       </Email> 
     <DateRegistration> 
       <![CDATA[10/19/2010 8:47:01 PM]]> 
       </DateRegistration> 
    </Member> 

Ich brauche die Mitglieds-ID, Name, E-Mail und DateRegistration zu extrahieren, aber wie Sie die xml sehen kann, ist nicht sehr gut formatiert. Ich habe versucht mit einfachen XML, die offensichtlich nicht funktioniert, aber Nether Regex scheint nicht zu funktionieren. Hier ist das Muster, das ich versucht:

$pattern = "/<Name><\\!\\[CDATA\\[(.*)\\]\\]><\/Name>/"; 
preg_match_all($pattern, $xml_content, $matches); 
$name = $matches[1][0][v]; 
echo " name is $name "; 
+3

einen XML-Parser verwenden, wie SimpleXML. – BoltClock

+0

Entschuldigung, dass Sie offensichtlich sind, aber warum benutzen Sie nicht http://ru2.php.net/simplexml? – zerkms

+3

Fehlt dem XML-Tag immer das schließende Datei-Tag oder könnten andere ungültige Konstrukte vorhanden sein? – Chandu

Antwort

0
$x='<file src="136090000-136100000"> 
     <usafisMember id="136090000"> 
      <Name> 
        <![CDATA[DOSEKUN DANIEL ADETUNJI]]> 
        </Name> 
      <Email> 
        <![CDATA[[email protected]]]> 
        </Email> 
      <DateRegistration> 
        <![CDATA[10/19/2010 8:46:57 PM]]> 
        </DateRegistration> 
     </usafisMember> 
     <usafisMember id="136090001"> 
      <Name> 
        <![CDATA[yoleida colina]]> 
        </Name> 
      <Email> 
        <![CDATA[[email protected]]]> 
        </Email> 
      <DateRegistration> 
        <![CDATA[10/19/2010 8:47:08 PM]]> 
        </DateRegistration> 
     </usafisMember> 
     <usafisMember id="136090002"> 
      <Name> 
        <![CDATA[Homero Valdovinos]]> 
        </Name> 
      <Email> 
        <![CDATA[[email protected]]]> 
        </Email> 
      <DateRegistration> 
        <![CDATA[10/19/2010 8:47:01 PM]]> 
        </DateRegistration> 
     </usafisMember> 
     </file> 
    '; 

    $xml = new SimpleXMLElement($x); 



foreach ($xml->usafisMember as $usafisMember){ 
echo 'Name: '. $usafisMember->Name.'<br>'; 
} 

hatte enge Datei hinzufügen, aber andere arbeitete weise wie erwartet

3

Parsen von XML mit regex almost certainly wrong ist. Verwenden Sie einen dedizierten XML-Parser. Es gibt viele verfügbar für PHP.

+0

ok, aber ich denke, dass das XML-Dokument ist nicht sehr gut formatiert ... – Michael

+0

XML kann nicht sein entweder gut formatiert oder nicht gut formatiert; es kann nur gültig sein. Wenn es kein gültiges XML ist, dann sollten Sie XML finden, das ist, sonst werden Sie nie in der Lage sein, dies zuverlässig zu tun. –

+0

(Ihr XML sieht auf den ersten Blick gut aus, abgesehen von dem fehlenden schließenden Tag.) –