XML mit PHP über id auslesen

PrincePitt

Grünschnabel
Halli Hallo.
ich stehe ziemlich auf dem schlauch und hoffentlich kann mir wieder jemand fix weiter helfen. Kurz zu meinem Projekt. Ich bekomme eine XML Datei von einem Drittanbiete diese muss ich auslesen und in eine Datenbank eintragen um es später über als normalen Beitrag mit extra Feldern ausgeben zu lassen. Das Speichern der XML und das Auslesen klappt auch alles ohne Probleme. Nun werden mir aber in der XML Datei einige Elemente öfter angezeigt die unterscheiden sich jetzt aber mit einer "ID". Nun möchte ich aber jedes Element in die Richtige Spalte in der die Datenbank eintragen. Mein Problem ist jetzt also wie kann ich die jeweilige ID in der XML ansprechen und mir dazu auch den Titel und den Content einzeln abfragen.

Hier ist der Aufbau der XML in Kurzform und mit Beispielen gefüllt.

XML:
<PositionOpening schemaLocation="">

<PositionProfile languageCode="de-DE">

<ID>653-1-10</ID>

<LastChange>05.03.2020 04:03:49</LastChange>

<PositionTitle>

<![CDATA[ VORLAGE ]]>

</PositionTitle>

<StyleTitle>

<![CDATA[ font-family :arial;Font-Size:12pt;font-weight :bold;color:#6B6B6B; ]]>

</StyleTitle>

<StyleText>

<![CDATA[ font-family :arial;Font-Size:10pt;font-weight :normal;color:#6B6B6B; ]]>

</StyleText>

<GroupingInformation/>

<UserArea>ID=10-1-653&c=_80N_04t_D9_C0_EE_9A_B7_3C_F9_EE_2B_DF_9F_5E6_29D_F5_90_A8s_11_F5_3B_E5_8AX_60_03_DD_DER_24VB_F9_8CJ_DD_82_9CsAl_E2_A1</UserArea>

<StyleButton/>

<PostingInstruction>

<FreeFormPeriod>

<StartDate>

<FormattedDateTime>05.03.2020</FormattedDateTime>

</StartDate>

</FreeFormPeriod>

<ApplicationMethod>

<Communication/>

<URI>ApplyForm/AppStart.aspx?c=K_24_9F_F5_82t_D6_05_F8_A6s_7E_14S_1AV_7E_01_E6_D1o_9AU_7E_F3M8_7D_3B_BB_80B_00_2CL_12_AE_E6_8A_5C_AD_0E_01_5D_87_AA_E2_9B</URI>

</ApplicationMethod>

</PostingInstruction>

<PositionFormattedDescription ID="0">

<Content>

<![CDATA[ <p style="text-align: justify;"> </p> <p>Unternehmenstext</p> <p style="text-align: justify;"> </p> <h3 style="text-align: center;"><strong>Titel der Stellenausschreibung (m/w/d)</strong> <p><strong>Arbeitszeit</strong></p></h3><br><br> ]]>

</Content>

</PositionFormattedDescription>

<PositionFormattedDescription ID="3">

<Name>

<![CDATA[ <p><strong>Ihre Aufgaben:</strong></p> ]]>

</Name>

<Content>

<![CDATA[ </ul><p><ul> <li>Aufgabe 1</li> <li>Aufgabe 2</li> <li>Aufgabe 3</li> <li>Aufgabe 4</li> <li>Aufgabe 5</li> <li>Aufgabe 6</li> <li>Aufgabe 7</li> <li>Aufgabe 8</li> <li>Aufgabe 9</li> <li>Aufgabe 10</li> </ul><br> ]]>

</Content>

</PositionFormattedDescription>

<PositionFormattedDescription ID="2">

<Name>

<![CDATA[ <p><strong>Ihr Profil:</strong></p> ]]>

</Name>

<Content>

<![CDATA[ </ul><p><ul> <li>Profil 1</li> <li>Profil 2</li> <li>Profil 3</li> <li>Profil 4</li> <li>Profil 5</li> <li>Profil 6</li> <li>Profil 7</li> <li>Profil 8</li> <li>Profil 9</li> <li>Profil 10</li> </ul><br> ]]>

</Content>

</PositionFormattedDescription>

<PositionFormattedDescription ID="4">

<Name>

<![CDATA[ <p><strong>Wir bieten:</strong></p> ]]>

</Name>

<Content>

<![CDATA[ </ul><p><p>Die Stelle ist zunächst auf 2 Jahre befristet, eine Übernahme ist möglich.</p> <p>Ihre Bewerbungsunterlagen inklusive Schul- und Arbeitszeugnissen mit Angabe Ihres nächstmöglichen Eintrittstermins senden Sie bitte bis zum <strong><u>XX.XX.XXXX</u></strong> bevorzugt per Mail (PDF) an: </p>  <p> </p> <p><strong>Informationen zur Datenverarbeitung für Bewerber finden Sie </strong></p><br> ]]>

</Content>

</PositionFormattedDescription>

<PositionFormattedDescription ID="6">

<Content>

<![CDATA[ <p> Herzliche Grüße<br> </p> <p>Unternehmenskommunikation</p>  ]]>

</Content>

</PositionFormattedDescription>

</PositionProfile>

</PositionOpening >

Und das habe ich mir jetzt irgendwie zusammen gestückelt um die abfrage zu testen.

PHP:
class FileXml {
public static function getField(SimpleXMLElement $node, $name){
    $data = $node->xpath("child::field [@id='{$name}']/child::data");
    return trim($data[0]);
}
    
    
    public static function thisxml (){
        global $thisdate;
        $xmlpath = "./includes/xml_import/xmlfiles/";
        $filexml = "stellenangebote-$thisdate.xml";
        $path = $xmlpath . $filexml;
        
        if (file_exists($path)):
        $xml = simplexml_load_file($path);
            foreach ($xml->xpath ('/PositionOpening/PositionProfile') as $data){
                $id =       FileXml::getField($data, '2');
                
                $attributes = $data->PositionFormattedDescription->attributes();
                echo "<br>".$data->PositionFormattedDescription->Content;
                echo $id;
            }
        endif;
    }
}

}
 
ist $name die gesuchte ID? Wenn ja, solltest du das umbennen.
Und du hast ja die Funktion getField(). ALso, was ist das Problem. Eine Fehlermeldung? Falsches Resultat?
 
Zurück