Daten aus XML mit verschiedenen Elementen ausgeben
Hi
Meine Frage bzw Problem ist, wie kann ich z.b. die killID und killTime aus dem ersten row mit der kill.php in die Datenbank schreiben.
XML (verkürzt)
Um die Infos aus dem ersten row in eine Datenbank zu schreiben habe ich diesen Code (verkürzt)
loss.php
Um die Infos ab den zweiten row in eine Datenbank zu schreiben habe ich diesen Code (verkürzt)
kill.php
Ich hoffe das die Frage verständlich ist.
Danke Jens1985
Meine Frage bzw Problem ist, wie kann ich z.b. die killID und killTime aus dem ersten row mit der kill.php in die Datenbank schreiben.
XML (verkürzt)
<eveapi version="2" zkbapi="1">
<currentTime>2014-01-17 20:30:56</currentTime>
<result>
<rowset name="kills" key="killID" columns="killID,solarSystemID,killTime,moonID">
<row killID="35996084" solarSystemID="30001161" killTime="2014-01-17 17:00:00" moonID="0">
<victim characterID="90925422" characterName="Like a Star" corporationID="98265589" corporationName="Cyberdine Network" allianceID="99004029" allianceName="Cyberdine Alliance" factionID="0" factionName="" damageTaken="457" shipTypeID="670"/>
<rowset name="attackers" columns="characterID,characterName,corporationID,corporationName,allianceID,allianceName,factionID,factionName,securityStatus,damageDone,finalBlow,weaponTypeID,shipTypeID">
<row characterID="1342329648" characterName="I'm Harmless" corporationID="1941177176" corporationName="Habitual Euthanasia" allianceID="386292982" allianceName="Pandemic Legion" factionID="0" factionName="" securityStatus="0.012744149626897" damageDone="86" finalBlow="1" weaponTypeID="14788" shipTypeID="671"/>
<row characterID="753881896" characterName="Alpha Dread" corporationID="719422279" corporationName="The Syndicate Inc" allianceID="99001003" allianceName="Cult of War" factionID="0" factionName="" securityStatus="4.6" damageDone="303" finalBlow="0" weaponTypeID="11196" shipTypeID="11196"/>
<row characterID="91418273" characterName="Ninja87 600" corporationID="1433401211" corporationName="Segmentum Solar" allianceID="1463354890" allianceName="Nulli Secunda" factionID="0" factionName="" securityStatus="4.9" damageDone="68" finalBlow="0" weaponTypeID="11200" shipTypeID="11200"/>
<row characterID="92321940" characterName="UnimatrixZero Arkaral" corporationID="1097611545" corporationName="Light of the moon" allianceID="99003581" allianceName="Fraternity." factionID="0" factionName="" securityStatus="5" damageDone="0" finalBlow="0" weaponTypeID="3244" shipTypeID="11202"/>
<row characterID="92975039" characterName="kuloma Irvam" corporationID="98055960" corporationName="SAKUMA DROP" allianceID="99001954" allianceName="Caladrius Alliance" factionID="0" factionName="" securityStatus="5" damageDone="0" finalBlow="0" weaponTypeID="2977" shipTypeID="11198"/>
<row characterID="92933133" characterName="Yiolo Lemorti" corporationID="616538591" corporationName="Sense of Serendipity" allianceID="807486236" allianceName="Echoes of Nowhere" factionID="0" factionName="" securityStatus="0.3" damageDone="0" finalBlow="0" weaponTypeID="2404" shipTypeID="11186"/>
</rowset>
</row>
<row killID="35996052" solarSystemID="30001161" killTime="2014-01-17 16:57:00" moonID="0">
<victim characterID="1001635641" characterName="Sukkra" corporationID="1756521678" corporationName="X-Com inc" allianceID="99002808" allianceName="Darkness of Despair" factionID="0" factionName="" damageTaken="463" shipTypeID="670"/>
<rowset name="attackers" columns="characterID,characterName,corporationID,corporationName,allianceID,allianceName,factionID,factionName,securityStatus,damageDone,finalBlow,weaponTypeID,shipTypeID">
<row characterID="480753537" characterName="Tornicks" corporationID="935907718" corporationName="Destructive Influence" allianceID="1727758877" allianceName="Northern Coalition." factionID="0" factionName="" securityStatus="5.004464661811" damageDone="17" finalBlow="1" weaponTypeID="27361" shipTypeID="11176"/>
<row characterID="169358295" characterName="Sir Erighan" corporationID="612633154" corporationName="Eve Defence Force" allianceID="99001003" allianceName="Cult of War" factionID="0" factionName="" securityStatus="0.1" damageDone="192" finalBlow="0" weaponTypeID="27361" shipTypeID="11176"/>
<row characterID="1312588913" characterName="Arnebjarnee" corporationID="98110531" corporationName="Black Flag Operations" allianceID="1147488332" allianceName="The Kadeshi" factionID="0" factionName="" securityStatus="0.1" damageDone="135" finalBlow="0" weaponTypeID="8093" shipTypeID="11176"/>
<row characterID="92529851" characterName="Author Dahar" corporationID="98055960" corporationName="SAKUMA DROP" allianceID="99001954" allianceName="Caladrius Alliance" factionID="0" factionName="" securityStatus="5" damageDone="70" finalBlow="0" weaponTypeID="7993" shipTypeID="11176"/>
<row characterID="92392389" characterName="Ganimoth Gandar" corporationID="868558972" corporationName="Critical Mass Inc." allianceID="99000819" allianceName="Nexus Fleet" factionID="0" factionName="" securityStatus="5" damageDone="49" finalBlow="0" weaponTypeID="2488" shipTypeID="11989"/>
<row characterID="1205743773" characterName="Stalward" corporationID="148763686" corporationName="Liga Freier Terraner" allianceID="1727758877" allianceName="Northern Coalition." factionID="0" factionName="" securityStatus="3.4" damageDone="0" finalBlow="0" weaponTypeID="32414" shipTypeID="23913"/>
<row characterID="1460710656" characterName="RSLuke" corporationID="967090302" corporationName="FRAPPE NATION" allianceID="99001990" allianceName="The Predictables" factionID="0" factionName="" securityStatus="1" damageDone="0" finalBlow="0" weaponTypeID="2889" shipTypeID="11989"/>
<row characterID="1002061014" characterName="Indoril Siconus" corporationID="1125584993" corporationName="RillaCorp" allianceID="1147488332" allianceName="The Kadeshi" factionID="0" factionName="" securityStatus="5" damageDone="0" finalBlow="0" weaponTypeID="8089" shipTypeID="11176"/>
<row characterID="170926231" characterName="Stella Loussier" corporationID="828800677" corporationName="Sniggerdly" allianceID="386292982" allianceName="Pandemic Legion" factionID="0" factionName="" securityStatus="-8.2" damageDone="0" finalBlow="0" weaponTypeID="3550" shipTypeID="19724"/>
<row characterID="90463696" characterName="Emily Nevis" corporationID="1111885788" corporationName="Enterprise Estonia" allianceID="1727758877" allianceName="Northern Coalition." factionID="0" factionName="" securityStatus="0" damageDone="0" finalBlow="0" weaponTypeID="31944" shipTypeID="23913"/>
<row characterID="91823466" characterName="oeilvert zeven" corporationID="98219493" corporationName="Corporation of Deep Space Development" allianceID="99001954" allianceName="Caladrius Alliance" factionID="0" factionName="" securityStatus="4.1" damageDone="0" finalBlow="0" weaponTypeID="8089" shipTypeID="11198"/>
<row characterID="1468003362" characterName="Ser Bus" corporationID="98190062" corporationName="Chinese People's Liberation Army" allianceID="99002084" allianceName="Pangu Coalition" factionID="0" factionName="" securityStatus="5" damageDone="0" finalBlow="0" weaponTypeID="3098" shipTypeID="11202"/>
<row characterID="140167246" characterName="M NUS" corporationID="148763686" corporationName="Liga Freier Terraner" allianceID="1727758877" allianceName="Northern Coalition." factionID="0" factionName="" securityStatus="2.5" damageDone="0" finalBlow="0" weaponTypeID="28209" shipTypeID="23757"/>
<row characterID="422225292" characterName="Mark Sinov" corporationID="148763686" corporationName="Liga Freier Terraner" allianceID="1727758877" allianceName="Northern Coalition." factionID="0" factionName="" securityStatus="1.7" damageDone="0" finalBlow="0" weaponTypeID="32414" shipTypeID="23913"/>
<row characterID="1349440821" characterName="Taeylana" corporationID="112548774" corporationName="North Eastern Swat" allianceID="386292982" allianceName="Pandemic Legion" factionID="0" factionName="" securityStatus="4.6" damageDone="0" finalBlow="0" weaponTypeID="19806" shipTypeID="23757"/>
<row characterID="836390512" characterName="Deravis Sunra" corporationID="98055960" corporationName="SAKUMA DROP" allianceID="99001954" allianceName="Caladrius Alliance" factionID="0" factionName="" securityStatus="5" damageDone="0" finalBlow="0" weaponTypeID="8903" shipTypeID="11989"/>
</rowset>
</row>
loss.php
<?php
$xmlFile = $filename;
if (file_exists($xmlFile))
{
$xml = simplexml_load_file($xmlFile);
if ($xml)
{
foreach ( $xml->result->rowset->row as $user )
{
$chN = ($user->victim["corporationName"]);
$chN = str_replace("'"," ",$chN);
$cN = ($user->victim["characterName"]);
$cN = str_replace("'"," ",$cN);
$aN = ($user->victim["allianceName"]);
$aN = str_replace("'"," ",$aN);
$sql =
"
INSERT INTO `tablename`
(
`characterName`,
`corporationName`,
`allianceName`,
`KillID`,
`killTime`,
`shipTypeID`,
`characterID`,
`allianceID`,
`corporationID`
)
VALUES
(
'$cN',
'$chN',
'$aN',
'".$user["killID"]."',
'".$user["killTime"]."',
'".$user->victim["shipTypeID"]."',
'".$user->victim["characterID"]."',
'".$user->victim["allianceID"]."',
'".$user->victim["corporationID"]."'
);
";
?>
Um die Infos ab den zweiten row in eine Datenbank zu schreiben habe ich diesen Code (verkürzt)
kill.php
<?php
$xmlFile = $filename;
if (file_exists($xmlFile))
{
$xml = simplexml_load_file($xmlFile);
if ($xml)
{
foreach ( $xml->xpath('//row') as $user )
{
if ($user['shipTypeID'] == "11567"
|| $user['shipTypeID'] == "23919"
|| $user['shipTypeID'] == "3514"
|| $user['shipTypeID'] == "671"
|| $user['shipTypeID'] == "23913"
|| $user['shipTypeID'] == "23773"
|| $user['shipTypeID'] == "22852"
|| $user['shipTypeID'] == "3764"
|| $user['shipTypeID'] == "23917")
{
$chN = ($user["corporationName"]);
$chN = str_replace("'"," ",$chN);
$cN = ($user["characterName"]);
$cN = str_replace("'"," ",$cN);
$aN = ($user["allianceName"]);
$aN = str_replace("'"," ",$aN);
$sql =
"
INSERT INTO `tablename`
(
`characterName`,
`corporationName`,
`allianceName`,
`KillID`,
`killTime`,
`shipTypeID`,
`characterID`,
`allianceID`,
`corporationID`
)
VALUES
(
'$cN',
'$chN',
'$aN',
'".$user["killID"]."',
'".$user["killTime"]."',
'".$user["shipTypeID"]."',
'".$user["characterID"]."',
'".$user["allianceID"]."',
'".$user["corporationID"]."'
);
";
?>
Ich hoffe das die Frage verständlich ist.
Danke Jens1985
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 226985
Url: https://administrator.de/forum/daten-aus-xml-mit-verschiedenen-elementen-ausgeben-226985.html
Ausgedruckt am: 10.04.2025 um 20:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo Jens,
ja ich denke schon das die Frage verständlich ist, aber was ist denn dein Problem dabei ?
Wenn wir nicht wissen was du vor hast, können wir das Problem auch nicht erkennen ;)
Willst du die beiden (oder ggf. mehrere) "victims" mit Angabe der Zeit und der ID in die Datenbank schreiben ?
Also möchtest du aus den beiden Zeilen 5+6 und 16+17:
Ein Query bauen das etwa wie dieses aussieht:
Dieses Query hast du schon fast selber zusammengebaut. Zumindest hast du schon alle Angaben selber ermittelt, auch die killID und killTime !
Und falls doch nicht... dann war zumindest für mich die Frage und das Problem nicht verständlich
~Arano
ja ich denke schon das die Frage verständlich ist, aber was ist denn dein Problem dabei ?
Wenn wir nicht wissen was du vor hast, können wir das Problem auch nicht erkennen ;)
Willst du die beiden (oder ggf. mehrere) "victims" mit Angabe der Zeit und der ID in die Datenbank schreiben ?
Also möchtest du aus den beiden Zeilen 5+6 und 16+17:
<row killID="35996084" solarSystemID="30001161" killTime="2014-01-17 17:00:00" moonID="0">
<victim characterID="90925422" characterName="Like a Star" corporationID="98265589" corporationName="Cyberdine Network" allianceID="99004029" allianceName="Cyberdine Alliance" factionID="0" factionName="" damageTaken="457" shipTypeID="670"/>
<row killID="35996052" solarSystemID="30001161" killTime="2014-01-17 16:57:00" moonID="0">
<victim characterID="1001635641" characterName="Sukkra" corporationID="1756521678" corporationName="X-Com inc" allianceID="99002808" allianceName="Darkness of Despair" factionID="0" factionName="" damageTaken="463" shipTypeID="670"/>
INSERT INTO `tablename`
( `characterName`,`corporationName`,`allianceName`,`KillID`,
`killTime`,`shipTypeID`,`characterID`,`allianceID`,`corporationID` )
VALUES ( 'Like a Star','Cyberdine Network','Cyberdine Alliance','35996084',
'2014-01-17 17:00:00','670','90925422','99004029','98265589'),
( 'Sukkra','X-Com inc','Darkness of Despair','35996052',
'2014-01-17 16:57:00','670','1001635641','99002808','1756521678')
Dieses Query hast du schon fast selber zusammengebaut. Zumindest hast du schon alle Angaben selber ermittelt, auch die killID und killTime !
<?php
$xmlFile = 'data.xml';
if( file_exists($xmlFile) )
{
$xml = simplexml_load_file( $xmlFile );
if( $xml ) // if WHAT !?!?!? if true, if false, if isresource, if eof, ...
{
$sql_start = "INSERT INTO `tablename`\n"
." ( `characterName`,`corporationName`,`allianceName`,`KillID`,\n"
." `killTime`,`shipTypeID`,`characterID`,`allianceID`,`corporationID` )\n"
." VALUES ";
$sql_values = array();
foreach( $xml->result->rowset->row as $user )
{
$chN = ($user->victim["corporationName"]);
$chN = str_replace( "'"," ",$chN );
$cN = ($user->victim["characterName"]);
$cN = str_replace( "'"," ",$cN );
$aN = ($user->victim["allianceName"]);
$aN = str_replace( "'"," ",$aN );
$sql_values = "( '$cN','$chN','$aN','".$user["killID"]."',\n"
." '".$user["killTime"]."','"
.$user->victim["shipTypeID"]."','"
.$user->victim["characterID"]."','"
.$user->victim["allianceID"]."','"
.$user->victim["corporationID"]."')";
}//foreach
// Hier bauen wir das Query vollständig zusammen !
$sql = $sql_start.implode( ",\n ",$sql_values );
echo '<pre>'.$sql.'</pre>';
}//if
}//if
?>
Und falls doch nicht... dann war zumindest für mich die Frage und das Problem nicht verständlich
~Arano
Hallo
Da dein PHP-Code dahingehend ja schon alle Daten ermittelt, stellen sich mir zwei Fragen:
~Arano
Da dein PHP-Code dahingehend ja schon alle Daten ermittelt, stellen sich mir zwei Fragen:
- Existieren denn die beiden Spalten "killID" und killTime" in der Datenbank und
- An welcher Stelle wird das erzeugte Query denn ausgeführt !?
~Arano
Moin moin !
Hm... haben wir hier doch aneinander vorbei geredet !?
Ich hatte dich ja gefragt ob du ein Query bauen möchtest (s. weiter oben) das dir die "victims" samt "killID" und "killTime" in die Datenbank schreibt und habe dir ein passendes Beispiel gepostet.
Ganz offensichtlich war das aber FALSCH und DU HAST NICHTS GESAGT !?
Du möchtest also ein Query wie dieses haben, Ja ?
Mit
Dann versuchst du die "attackers" über die "shipTypeID" zu filtern und reduzierst alles auf die einzelnen "rows" der "attackers". Dabei geht das erste row verloren, dieses enthält aber deine benötigte "killID" und "killTime".
Du musst dir also den ersten großen XML-Teil aus der Datei ziehen: quasi das "kill-row".
Merkst dir die "killID" und "killTime" und ziehst dir dann aus dem "kill-row" die einzelnen "attacker-rows" und kannst dann deren Daten, zusammen mit den gemerkten "killID" und "killTime" in die DB speichern bzw. das Query zusammenbauen und alles in einem rutsch in die DB schreiben.
Hättest du man gleich gesagt
Hoffe es passt jetzt
~Arano
Hm... haben wir hier doch aneinander vorbei geredet !?
Ich hatte dich ja gefragt ob du ein Query bauen möchtest (s. weiter oben) das dir die "victims" samt "killID" und "killTime" in die Datenbank schreibt und habe dir ein passendes Beispiel gepostet.
Ganz offensichtlich war das aber FALSCH und DU HAST NICHTS GESAGT !?
Du möchtest also ein Query wie dieses haben, Ja ?
INSERT INTO `tablename`
( `characterName`,`corporationName`,`allianceName`,`KillID`,
`killTime`,`shipTypeID`,`characterID`,`allianceID`,`corporationID` )
VALUES ( 'I m Harmless','Habitual Euthanasia','Pandemic Legion','35996084',
'2014-01-17 17:00:00','671','1342329648','386292982','1941177176'),
( 'Stalward','Liga Freier Terraner','Northern Coalition.','35996052',
'2014-01-17 16:57:00','23913','1205743773','1727758877','148763686'),
( 'Emily Nevis','Enterprise Estonia','Northern Coalition.','35996052',
'2014-01-17 16:57:00','23913','90463696','1727758877','1111885788'),
( 'Mark Sinov','Liga Freier Terraner','Northern Coalition.','35996052',
'2014-01-17 16:57:00','23913','422225292','1727758877','148763686')
$xml->xpath('//row')
bekommst du ALLE "row" Elemente (inkl. ihren Kindelementen), die "rows" der "attackers" erhältst du so doppelt: Einmal als Kindelemente des ersten "row" und ein zweites mal als eigenständige "row".Dann versuchst du die "attackers" über die "shipTypeID" zu filtern und reduzierst alles auf die einzelnen "rows" der "attackers". Dabei geht das erste row verloren, dieses enthält aber deine benötigte "killID" und "killTime".
Du musst dir also den ersten großen XML-Teil aus der Datei ziehen: quasi das "kill-row".
Merkst dir die "killID" und "killTime" und ziehst dir dann aus dem "kill-row" die einzelnen "attacker-rows" und kannst dann deren Daten, zusammen mit den gemerkten "killID" und "killTime" in die DB speichern bzw. das Query zusammenbauen und alles in einem rutsch in die DB schreiben.
<?php
$xmlFile = 'data.xml';
if( file_exists($xmlFile) )
{
$xml = simplexml_load_file( $xmlFile );
if( $xml ) // if WHAT !?!?!? if true, if false, if isresource, if eof, ...
{
$sql_start = "INSERT INTO `tablename`\n"
." ( `characterName`,`corporationName`,`allianceName`,`KillID`,\n"
." `killTime`,`shipTypeID`,`characterID`,`allianceID`,`corporationID` )\n"
." VALUES ";
$sql_values = array();
foreach( $xml->xpath('result/rowset/row') as $kill )
{
/**
* $kill enthält nun das "kill-row" mit allen seinen kindelementen
*
* <row killID= >
* <victim characterID= />
* <rowset name="attackers" >
* <row characterID= />
* <row characterID= />
* ...
* </rowset>
* </row>
*/
// wir lesen die "killID" und die "killTime" raus und parsen den rest erneut
// um nur die beteiligten user des kills zu erhalten:
echo '<br>kill: <b>'.$kill['killID'].'</b><br>';
$killID = $kill['killID'];
$killTime = $kill['killTime'];
#print_r($kill);
// erneutes parsen
foreach( $kill->xpath('rowset/row') as $user )
{
// wenn shipTypeID des users NICHT einer dieser entspricht - überspringe ihn.
if( !in_array($user['shipTypeID'],array(11567,23919,3514,671,23913,23773,22852,3764,23917)) )
continue;
echo $user["characterName"].'<br>';
$chN = str_replace( "'"," ",$user["corporationName"] );
$cN = str_replace( "'"," ",$user["characterName"] );
$aN = str_replace( "'"," ",$user["allianceName"] );
$sql_values = "( '$cN','$chN','$aN','".$killID."',\n"
." '".$killTime."','"
.$user["shipTypeID"]."','"
.$user["characterID"]."','"
.$user["allianceID"]."','"
.$user["corporationID"]."')";
} //foreach $kill
} //foreach $xml
$sql = $sql_start.implode( ",\n ",$sql_values );
echo '<pre>'.$sql.'</pre>';
} //if
} //if
?>
Hättest du man gleich gesagt
- was du vorhast,
- wie du es versuchst und
- was GENAU nicht funktioniert.
Hoffe es passt jetzt
~Arano