2016-05-23 12 views
0

Ich habe eine .xml Datei (Original mit über 7000 Zeilen, aber zum Testen habe ich eine mit nur 3 Zeilen verwendet, falls die Größe mein Problem war, aber es war nicht t), aus dem ich die Daten extrahieren möchte. Doch eine automatisch generierte Sache zu sein, dann ist es nicht sehr hübsch, beobachten:Extrahieren von Daten aus (riesigen) XML-Datei mit PHP

<ROW MODID="182" RECORDID="561"> 
<COL> 
<DATA> 
</DATA> 
</COL> 
<COL> 
<DATA> 
6 quai St Pierre</DATA> 
</COL> 
<COL> 
<DATA> 
</DATA> 
</COL> 
<COL> 
<DATA> 
Monsieur</DATA> 
</COL> 
<COL> 

etc, etc ... Ich habe entwickelt bereits die Anfragen, die ich auf Xacobeo ausführen müssen, aber ich kann nicht scheinen, Es funktioniert mit PHP. Ich habe eine Vielzahl von Variationen versucht, die letzten die folgenden sein:

$xmldoc = new DOMDocument(); 
$xmldoc->load('hellashort.xml'); 
$xpathvar = new Domxpath($xmldoc); 
$queryResult = $xpathvar->query('//COL'); 
foreach($queryResult as $result){ 
    echo $result->textContent; 
} 

Ich habe versucht, diesen Code mit ästhetisch ansprechenden Dateien und es funktioniert, so wie kann ich es bekomme die Arbeit mit dieser Datei? Alle Vorschläge geschätzt. Dank

UPDATE ich die kurze Datei auf Fehler überprüft und erkennen ich nicht ein Element geschlossen hatte, so dass man arbeitet, aber die lange Datei keine Fehler enthält nach dem Online-checker aber immer noch nicht funktioniert .

UPDATE 2 Die lange Datei arbeitet jetzt für die Anforderung / aber gibt nichts zurück, sobald sie komplizierter, das heißt: //ROW/COL[position()=39]/DATA die richtigen Ergebnisse in Xacobeo zurückzukehren. Ist es möglich, dass eine .xml Datei zu groß ist, um auf diese Weise behandelt zu werden? (Diese Datei ist etwa 11,2 Mo)

UPDATE 3 - FIXED Also änderte ich meine genähert und landete es auf diese Weise tun:

$file=file_get_contents("go.xml"); 
$xml=simplexml_load_string($file); 
$elements=$xml->path('//ROW/COL[position()=1]/DATA'); 

ich sehen, warum es SimpleXML, vielen Dank für all die aufgerufen wird help though

+1

Ich würde vorschlagen, die XML mit einem Online-Tool zu validieren und auch teilen, welchen Fehler Sie bekommen, oder was passiert. – Netham

+0

Es werden keine Fehler angezeigt (entweder auf dem Bildschirm oder im Protokoll), und es erscheint kein Ergebnis ... Ich habe vor und nach der Funktion ein paar zufällige Sätze wiederholt, um sicherzustellen, dass ich nicht den weißen Bildschirm des Todes bekomme, und Beide sind gut. –

Antwort

0

Zuerst stellen Sie sicher, dass Ihr Server eingestellt ist, um alle verfügbaren Fehler anzuzeigen. Als Variante, legen Sie dieses Snippet ganz am Anfang Ihres Skripts.

ini_set('display_startup_errors',1); 
ini_set('display_errors',1); 
error_reporting(E_ALL | E_STRICT); 

Könnten Sie dann die Fehlermeldung teilen?

+0

Keine Fehler erscheinen entweder im Browser oder im Apache Fehlerprotokoll ... Eine 'print_r' des Arrays gibt mir' DOMNodeList Object() ' –

0

Stellen Sie sicher, Ihr Dokument genau ein Wurzelelement hat, dh ein Element alle <ROW> Elemente enthalten:

<DOCUMENT> 
<ROW MODID="182" RECORDID="561"> 
<COL> 
<DATA> 
</DATA> 
</COL> 
<COL> 
<DATA> 
6 quai St Pierre</DATA> 
</COL> 
<COL> 
<DATA> 
<!-- ... --> 
</DOCUMENT> 

Wenn Sie ohne root mehrere Zeilen haben, es ist nicht ein gut formet XML-Datei und es wird fehlschlagen:

<ROW MODID="182" RECORDID="561"> 
<COL> 
<DATA> 
</DATA> 
</COL> 
<COL> 
<!-- ... --> 
</ROW> 
<ROW MODID="183" RECORDID="562"> 
<!-- ... --> 
</ROW> 
+0

Ich habe überprüft, dass die gesamte Datei in einem' 'Element enthalten ist .. Ich bin ziemlich sicher, dass es richtig gelesen wird, da die Abfrage funktioniert, wenn es nur "/" ist –