XML-TAG-ID mittels PHP auslesen und in DB speichern

Mauritius

Grünschnabel
Hallo PHP Freunde,

ich stehe gerade ziemlich auf dem Schlauch. Ich soll mittels PHP ein XML Dokument auslesen. Dies ist weiterhin kein großes Problem. Das richtige Auslesen der "IDs" in den Tags jedoch schon. Am Ende soll dies in eine MySQL DB eingetragen werden. Die XML sieht so aus:

Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<userimport>
	<organization id="BehoerdeA">
		<user>
			<profile>
				 <credentials>
					<login-id>mustermann</login-id>
					<password>muster123</password>
					<enabled>1</enabled>
					<memoryQuestion>Name des Hundes?</memoryQuestion>
					<memoryAnswer>Mo</memoryAnswer>
				</credentials>
				<first-name>Peter</first-name>
				<last-name>Mustermann</last-name>
				<title>Dr.</title>
				<middleName>von</middleName>
				<addresses>
					<address name="Default Address">
						<city>Wiesbaden</city>
						<postal-code>56780</postal-code>
						<street>Frankfurter Str. 1</street>
						<street2>Raum 47</street2>
						<phone-business-direct>0621 / 6560 - 100</phone-business-direct>
						<email>peter.mustermann@localhost</email>
					</address>
				</addresses>	
				<user-groups id="AbteilungA">
					<user-group id="Beschaffer"/>
					<user-group id="Standard-Mitarbeiter"/>
				</user-groups>
				<user-groups id="AbteilungB">
					<user-group id="Genehmigender"/>
					<user-group id="Standard-Mitarbeiter"/>
					<user-group id="Aushilfe"/>
					<user-group id="Zivi"/>
				</user-groups>		
			</profile>
		</user>
		<user>
			<profile>
				 <credentials>
						<login-id>deich</login-id>
						<password>deich123</password>
						<enabled>1</enabled>
						<memoryQuestion>Name der Katze?</memoryQuestion>
						<memoryAnswer>Miau</memoryAnswer>
				</credentials>
				<first-name>Dieter</first-name>
				<last-name>Deich</last-name>
				<title></title>
				<middleName></middleName>
				<addresses>
					<address name="Default Address">
						<city>Paderborn</city>
						<postal-code>33104</postal-code>
						<street>Briloner Str. 1</street>
						<street2>Raum 46</street2>
						<phone-business-direct>05251 / 6510 - 100</phone-business-direct>
						<email>dieter.deich@localhost</email>
					</address>
				</addresses>
				<user-groups id="AbteilungC">
					<user-group id="Standard-Mitarbeiter"/>
					<user-group id="Azubi"/>
				</user-groups>
				<user-groups id="AbteilungD">
					<user-group id="Standard-Mitarbeiter"/>
					<user-group id="Azubi"/>
				</user-groups>
			</profile>
		</user>
	</organization>
</userimport>

Im speziellen meine ich die IDs der XML Tags "user-groups" & "user-group". Diese sollten am besten mittels einer Schleife ausgelesen und in eine DB eingetragen werden. Das einlesen und eintragen der XML Datei ist kein Problem, funktioniert auch. Das rochtige einlesen und eintragen der "IDs" wie bspw. "<user-groups id="AbteilungA">" jedoch schon. Mein Code sieht derzeit so aus:
PHP:
<?php  

//Datenbankverbindung
include("db_connect.php");

//pdf erzeugung
include("fpdf.php");

//angabe zum pfad der xml-datei und speichern in eine variable
$file = "beispiel_xml.xml";
$xml = simplexml_load_file($file);

//dateigröße in variable speichern
$xmlmax = $xml->xpath('/userimport/organization');
$max = count($xml);

//speichern der werte in ein array
$login_id = $xml->xpath('/userimport/organization/user/profile/credentials/login-id');
$password = $xml->xpath('/userimport/organization/user/profile/credentials/password');
$enabled = $xml->xpath('/userimport/organization/user/profile/credentials/enabled');
$memoryQuestion = $xml->xpath('/userimport/organization/user/profile/credentials/memoryQuestion');
$memoryAnswer = $xml->xpath('/userimport/organization/user/profile/credentials/memoryAnswer');

$first_name = $xml->xpath('/userimport/organization/user/profile/first-name');
$last_name = $xml->xpath('/userimport/organization/user/profile/last-name');
$title = $xml->xpath('/userimport/organization/user/profile/title');
$middleName = $xml->xpath('/userimport/organization/user/profile/middleName');

$city = $xml->xpath('/userimport/organization/user/profile/addresses/address/city');
$postal_code = $xml->xpath('/userimport/organization/user/profile/addresses/address/postal-code');
$street = $xml->xpath('/userimport/organization/user/profile/addresses/address/street');
$phone_business_direct = $xml->xpath('/userimport/organization/user/profile/addresses/address/phone-business-direct');
$email = $xml->xpath('/userimport/organization/user/profile/addresses/address/email');

$user_groups = $xml->xpath('/userimport/organization/user/profile/user-groups');
$user_role = $xml->xpath('/userimport/organization/user/profile/user-groups/user-group');

$profile = $xml->xpath('/userimport/organization/user/profile');
echo count($user_groups[1]);




$j = 0;
for($i = 0; $i <= $max; $i++){

//echo "i: ".$i."<br>";	

	
	$enabled_int = intval($enabled[$i]);
	$postal_code_int = intval($postal_code[$i]);
	
	//eintrag in Datenbank
	$insert = "INSERT INTO kdb (loginid, password, enabled, memoryquestion, memoryanswer, firstname, lastname, title, middlename, city, postalcode, street, phonebusinessdirect, email) VALUES ('$login_id[$i]', '$password[$i]', '$enabled_int', '$memoryQuestion[$i]', '$memoryAnswer[$i]', '$first_name[$i]', '$last_name[$i]', '$title[$i]', '$middleName[$i]', '$city[$i]', '$postal_code_int', '$street[$i]', '$phone_business_direct[$i]', '$email[$i]')";
	$eintragen = mysql_query($insert);
	
	//echo $eintragen;

// $groupmax = count($profile[$i])-6;
	// //echo $groupmax."<br>";
	
	
	
	// $tmp = 0;
	// for($j = 0; $j <= $groupmax; $j++){
		// echo "j: ".$j."<br>";
		// $department = $user_groups[$j]->attributes();
		// echo "Department: ".$department;
		// echo "<br>";
		// $rolemax = count($user_groups[$j]);
		// echo "rolemax: ".$rolemax."<br>";
		
		// for($k = $tmp; $k <= $rolemax; $k++){
			// echo "k: ".$k."<br>";
			// $role = $user_role[$k]->attributes();
			// echo "Role: ".$role;
			// echo "<br>";
			// $tmp = $k+1;
			// //echo "<br>TEMP:".$tmp."<br>";
			
		
		// }
	// }

	
}

//for($i = 0;$i <= $max;$i++){
	for($j = 0;$j <= count($profile[0])-5;$j++){
		$department[$j] = $user_groups[$j]->attributes();
		//var_dump($department[$j]);
		echo $j."Department: ".$department[$j]."<br>";

	}
$tmp = 0;
for($p = $tmp;$p <= count($user_groups[1])-1;$p++){

$role = $user_role[$p]->attributes();
		echo "Role: ".$role."<br>";
		$tmp = $p;
}



		
//}		

?>

Da sind teilweise noch auskommentierte Codeblöcke drin, die nicht so wirklich funktionieren wollen. Wichtig ist nur, das am Ende in der Tabelle folgendes eingetragen wird:
loginid, Abteilung (id des Tags <user-groups>) und recht (id des tags "<user-group>).

Das Problem ist auch, das Array mit den ids des Tags <user-group> nur ein Array ist. Sprich, die Elemente 1 - x belegt sind. Ich hatte es, wie man im auskommentierten Codeblock sieht, versucht mit einem zwischenspeicher. Hat jedoch auch nicht geholfen.

Hat jemand von euch einen Hinweis, Tipp oder Lösungsvorschlag? Ich steh da derzeit total auf dem Schlauch...

Vielen Dank schonmal.

Viele Grüße
Moritz
 
Zurück