2016-04-26 6 views
0

Basierend auf dem, was ich gelesen habe, scheint es, als ob die beste Methode zum Parsen von XML in PHP die Methode ist. Jedes Beispiel, das ich fand, bestand aus XML, die unterschiedliche Kindknotennamen haben. In meinem Fall habe ich XML in einem Zeilen-/Wertformat. Ich möchte in der Lage sein, jede einzelne Zeile in ein benutzerdefiniertes Objekt namens 'Job' zu zerlegen. So stellt jeder Zeilenknoten im XML einen "Job" dar und jeder Datenknoten eine Job-Eigenschaft. Was ist der beste Weg, um diese Art von XML in PHP zu analysieren?XML im Zeilen-/Wertformat nach benutzerdefinierten Objekten in PHP analysieren

Hier ein Beispiel für die XML ist, dass ich zu analysieren, ich versuche:

<?xml version="1.0" encoding="utf-8"?> 
<dataset xmlns="http://developer.cognos.com/schemas/xmldata/1/" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> 
<!-- 
<dataset 
    xmlns="http://developer.cognos.com/schemas/xmldata/1/" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" 
    xs:schemaLocation="http://developer.cognos.com/schemas/xmldata/1/ xmldata.xsd" 
> 
--> 
    <metadata> 
      <item name="RequisitionNumber" type="xs:string" length="52"/> 
      <item name="Title" type="xs:string" length="52"/> 
      <item name="City" type="xs:string" length="52"/> 
      <item name="State" type="xs:string" length="52"/> 
      <item name="PostalCode" type="xs:string" length="52"/> 
      <item name="Description" type="xs:string" length="52"/> 
      <item name="Requirements" type="xs:string" length="52"/> 
      <item name="ID" type="xs:string" length="52"/> 
    </metadata> 
    <data> 
     <row> 
      <value>16-1279</value> 
      <value>Manager</value> 
      <value>Portland</value> 
      <value>OR</value> 
      <value>98660</value> 
      <value>Manager Description goes here</value> 
      <value>Requirements go here</value> 
      <value>45</value> 
     </row> 
     <row> 
      <value>16-1279</value> 
      <value>Exec</value> 
      <value>Portland</value> 
      <value>OR</value> 
      <value>98660</value> 
      <value>Exec Description goes here</value> 
      <value>Exec go here</value> 
      <value>45</value> 
     </row> 
    </data> 
</dataset> 

Dies ist der Weg, den ich begonnen haben, nach unten:

class Job 
{ 
     function __construct($requisitionnumber, $title, $city, $state, $postalcode, $description, $requirements) 
     { 
      $this->RequisitionNumber = $requisitionnumber; 
      $this->Title = $title; 
      $this->City = $city; 
      $this->State = $state; 
      $this->PostalCode = $postalcode; 
      $this->Description = $description; 
      $this->Requirements = $requirements; 
     }  
} 

function ParseReportResult($xml) 
{ 
    $jobs = array(); 
    foreach($xml->row) 
    { 
     //How do I parse each data node into the below object? 
     $job = new Job($requisitionnumber, $title, $city, $state, $postalcode, $description, $requirements); 
     array_push($jobs, $job); 
    } 

    return $jobs;  
} 

Antwort

1

Angenommen, Sie haben eine Variable $dataset benannt, die xML-Beispiel enthält, können Sie darauf zugreifen, wie unten dargestellt:

function ParseReportResult($xml) 
{ 
    $jobs = array(); 
    foreach($xml->row as $row) 
    { 
     $requisitionnumber = (string) $row->value[0]; 
     $title = (string) $row->value[1]; 
     $city = (string) $row->value[2]; 
     $state = (string) $row->value[3]; 
     $postalcode = (string) $row->value[4]; 
     $description = (string) $row->value[5]; 
     $requirements = (string) $row->value[6]; 

     $job = new Job($requisitionnumber, $title, $city, $state, $postalcode, $description, $requirements); 
     array_push($jobs, $job); 
    } 

    return $jobs;  
} 

Sie rufen Ihre Funktion wie t his:

Sie sollten sicherstellen, dass die Werte in der richtigen Reihenfolge sind, damit dies funktioniert.

1

Sie greifen sollten den Pfad „Daten unter Verwendung von/row "und dann die Indizes von" Wert "verwenden. Es funktioniert nur, wenn jeder Daten Tag die gleichen Werte an den gleichen Positionen haben:

$content = new SimpleXMLElement($xmldata); 

foreach($content->data->row as $item){ 
    print_r($item->value); 
    $requisitionnumber = $item->value[0]->__toString(); 
    $title = $item->value[1]->__toString(); 
    //... 
    $job = new Job($requisitionnumber, $title, $city, $state, $postalcode, $description, $requirements); 

} 

Der Metadaten-Tag enthält Informationen über den „Wert“ Spalten, so können Sie sicherstellen, die richtigen Positionen Lesen von

Lesen
$content->metadata->item[$position] 
Verwandte Themen