Hallo zusammen,
ich bin in sachen XML ein neuling. Und brauche hilfe.
Es geht um folgendes Problem.
Aus ein XML Datei möchte ich mittels PHP 5 die Daten in SQL abspeichern.
Aus der XML Datei möchte ich alles was zwischen <EVENT-DATA> und </EVENT-DATA> mittels PHP in SQL speichern.
In dieser Beispiel habe ich jetzt 3 x Daten zwischen <EVENT-DATA> und </EVENT-DATA> Dies könnte auch bis 1000 mal mit daten gefült sein.
Meine XML Datei sieht so aus.
<?xml version="1.0" encoding="UTF-8" ?>
<EVENT>
<HEADER>
<send-date>20080104171622</send-date>
<event-amt>3</event-amt>
</HEADER>
<EVENT-DATA>
<GLOBAL>
<event-id>1-14328397</event-id>
<datetime>20071220160933</datetime>
<systemID>1</systemID>
</GLOBAL>
<EVENT-SWITCH>
<action>pull</action>
</EVENT-SWITCH>
</EVENT-DATA>
<EVENT-DATA>
<GLOBAL>
<event-id>2-14328397</event-id>
<crn>106336033</crn>
<datetime>20071220180813</datetime>
<systemID>1</systemID>
</GLOBAL>
<SUBSCRIPTION>
<subscribe-data>
<subscribe-id>822573072</subscribe-id>
<subscriptionDefinitionID>821753185</subscriptionDefinitionID>
<currency>EUR</currency>
<start-date>20071220160644</start-date>
<termination-date>20071227160644</termination-date>
<termination-reason>REGULAR</termination-reason>
<action>terminated</action>
<sub-def-name>Datei Download</sub-def-name>
<fee-number>1</fee-number>
<external-id>0F1C1EBDA4F5C41114123342538892378CCA5B5E</external-id>
<click-url>http://premium-5e4g3940gdcp39.eu.clickandbuy.com/transactionabook.php?price=1299&Code12=0F1C1EBDA4F5C41114123342538892378CCA5B5E</click-url>
<clickedLinkID>176630</clickedLinkID>
</subscribe-data>
</SUBSCRIPTION>
</EVENT-DATA>
<EVENT-DATA>
<GLOBAL>
<event-id>3-14328397</event-id>
<crn>106391650</crn>
<datetime>20071222123146</datetime>
<systemID>1</systemID>
</GLOBAL>
<SUBSCRIPTION>
<subscribe-data>
<subscribe-id>817512543</subscribe-id>
<subscriptionDefinitionID>817430848</subscriptionDefinitionID>
<currency>EUR</currency>
<start-date>20071215123146</start-date>
<termination-date>20071222123146</termination-date>
<termination-reason>SELLER_REGULAR</termination-reason>
<action>ended</action>
<sub-def-name>Datei Download</sub-def-name>
<fee-number>1</fee-number>
<click-url>http://premium-6kg7zmj6lsztn6.eu.clickandbuy.com/transactionok.php</click-url>
<clickedLinkID>176352</clickedLinkID>
</subscribe-data>
</SUBSCRIPTION>
</EVENT-DATA>
</EVENT>
mit php habe ich bis jetzt erreicht:
$file = "DateiDownload.xml";
function trustedFile($file)
{
// only trust local files owned by ourselves
if (!eregi("^([a-z]+)://", $file) && fileowner($file) == getmyuid())
{
return true;
}
return false;
}
function startElement($parser, $name, $attribs)
{
echo "<<font color=\"#0000cc\">$name</font>";
if (count($attribs))
{
foreach ($attribs as $k => $v)
{
echo " <font color=\"#009900\">$k</font>=\"<font color=\"#990000\">$v</font>\"";
}
}
echo ">";
}
function endElement($parser, $name)
{
echo "</<font color=\"#0000cc\">$name</font>>";
}
function characterData($parser, $data)
{
echo "<b>$data</b>";
}
function PIHandler($parser, $target, $data)
{
switch (strtolower($target))
{
case "php":
global $parser_file;
// If the parsed document is "trusted", we say it is safe
// to execute PHP code inside it. If not, display the code
// instead.
if (trustedFile($parser_file[$parser]))
{
eval($data);
} else {
printf("Untrusted PHP code: <i>%s</i>", htmlspecialchars($data));
}
break;
}
}
function defaultHandler($parser, $data)
{
if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";")
{
printf('<font color="#aa00aa">%s</font>', htmlspecialchars($data));
} else {
printf('<font size="-1">%s</font>', htmlspecialchars($data));
}
}
function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId, $publicId)
{
if ($systemId)
{
if (!list($parser, $fp) = new_xml_parser($systemId))
{
printf("Could not open entity %s at %s\n", $openEntityNames, $systemId);
return false;
}
while ($data = fread($fp, 4096))
{
if (!xml_parse($parser, $data, feof($fp)))
{
printf("XML error: %s at line %d while parsing entity %s\n",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser), $openEntityNames);
xml_parser_free($parser);
return false;
}
}
xml_parser_free($parser);
return true;
}
return false;
}
function new_xml_parser($file)
{
global $parser_file;
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
xml_set_processing_instruction_handler($xml_parser, "PIHandler");
xml_set_default_handler($xml_parser, "defaultHandler");
xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");
if (!($fp = @fopen($file, "r")))
{
return false;
}
if (!is_array($parser_file))
{
settype($parser_file, "array");
}
$parser_file[$xml_parser] = $file;
return array($xml_parser, $fp);
}
if (!(list($xml_parser, $fp) = new_xml_parser($file)))
{
die("could not open XML input");
}
echo "<pre>";
while ($data = fread($fp, 4096))
{
if (!xml_parse($xml_parser, $data, feof($fp)))
{
die(sprintf("XML error: %s at line %d\n",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
echo "</pre>";
echo "parse complete\n";
xml_parser_free($xml_parser);
Für jeder Information wäre ich dankbar
ich bin in sachen XML ein neuling. Und brauche hilfe.
Es geht um folgendes Problem.
Aus ein XML Datei möchte ich mittels PHP 5 die Daten in SQL abspeichern.
Aus der XML Datei möchte ich alles was zwischen <EVENT-DATA> und </EVENT-DATA> mittels PHP in SQL speichern.
In dieser Beispiel habe ich jetzt 3 x Daten zwischen <EVENT-DATA> und </EVENT-DATA> Dies könnte auch bis 1000 mal mit daten gefült sein.
Meine XML Datei sieht so aus.
<?xml version="1.0" encoding="UTF-8" ?>
<EVENT>
<HEADER>
<send-date>20080104171622</send-date>
<event-amt>3</event-amt>
</HEADER>
<EVENT-DATA>
<GLOBAL>
<event-id>1-14328397</event-id>
<datetime>20071220160933</datetime>
<systemID>1</systemID>
</GLOBAL>
<EVENT-SWITCH>
<action>pull</action>
</EVENT-SWITCH>
</EVENT-DATA>
<EVENT-DATA>
<GLOBAL>
<event-id>2-14328397</event-id>
<crn>106336033</crn>
<datetime>20071220180813</datetime>
<systemID>1</systemID>
</GLOBAL>
<SUBSCRIPTION>
<subscribe-data>
<subscribe-id>822573072</subscribe-id>
<subscriptionDefinitionID>821753185</subscriptionDefinitionID>
<currency>EUR</currency>
<start-date>20071220160644</start-date>
<termination-date>20071227160644</termination-date>
<termination-reason>REGULAR</termination-reason>
<action>terminated</action>
<sub-def-name>Datei Download</sub-def-name>
<fee-number>1</fee-number>
<external-id>0F1C1EBDA4F5C41114123342538892378CCA5B5E</external-id>
<click-url>http://premium-5e4g3940gdcp39.eu.clickandbuy.com/transactionabook.php?price=1299&Code12=0F1C1EBDA4F5C41114123342538892378CCA5B5E</click-url>
<clickedLinkID>176630</clickedLinkID>
</subscribe-data>
</SUBSCRIPTION>
</EVENT-DATA>
<EVENT-DATA>
<GLOBAL>
<event-id>3-14328397</event-id>
<crn>106391650</crn>
<datetime>20071222123146</datetime>
<systemID>1</systemID>
</GLOBAL>
<SUBSCRIPTION>
<subscribe-data>
<subscribe-id>817512543</subscribe-id>
<subscriptionDefinitionID>817430848</subscriptionDefinitionID>
<currency>EUR</currency>
<start-date>20071215123146</start-date>
<termination-date>20071222123146</termination-date>
<termination-reason>SELLER_REGULAR</termination-reason>
<action>ended</action>
<sub-def-name>Datei Download</sub-def-name>
<fee-number>1</fee-number>
<click-url>http://premium-6kg7zmj6lsztn6.eu.clickandbuy.com/transactionok.php</click-url>
<clickedLinkID>176352</clickedLinkID>
</subscribe-data>
</SUBSCRIPTION>
</EVENT-DATA>
</EVENT>
mit php habe ich bis jetzt erreicht:
$file = "DateiDownload.xml";
function trustedFile($file)
{
// only trust local files owned by ourselves
if (!eregi("^([a-z]+)://", $file) && fileowner($file) == getmyuid())
{
return true;
}
return false;
}
function startElement($parser, $name, $attribs)
{
echo "<<font color=\"#0000cc\">$name</font>";
if (count($attribs))
{
foreach ($attribs as $k => $v)
{
echo " <font color=\"#009900\">$k</font>=\"<font color=\"#990000\">$v</font>\"";
}
}
echo ">";
}
function endElement($parser, $name)
{
echo "</<font color=\"#0000cc\">$name</font>>";
}
function characterData($parser, $data)
{
echo "<b>$data</b>";
}
function PIHandler($parser, $target, $data)
{
switch (strtolower($target))
{
case "php":
global $parser_file;
// If the parsed document is "trusted", we say it is safe
// to execute PHP code inside it. If not, display the code
// instead.
if (trustedFile($parser_file[$parser]))
{
eval($data);
} else {
printf("Untrusted PHP code: <i>%s</i>", htmlspecialchars($data));
}
break;
}
}
function defaultHandler($parser, $data)
{
if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";")
{
printf('<font color="#aa00aa">%s</font>', htmlspecialchars($data));
} else {
printf('<font size="-1">%s</font>', htmlspecialchars($data));
}
}
function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId, $publicId)
{
if ($systemId)
{
if (!list($parser, $fp) = new_xml_parser($systemId))
{
printf("Could not open entity %s at %s\n", $openEntityNames, $systemId);
return false;
}
while ($data = fread($fp, 4096))
{
if (!xml_parse($parser, $data, feof($fp)))
{
printf("XML error: %s at line %d while parsing entity %s\n",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser), $openEntityNames);
xml_parser_free($parser);
return false;
}
}
xml_parser_free($parser);
return true;
}
return false;
}
function new_xml_parser($file)
{
global $parser_file;
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
xml_set_processing_instruction_handler($xml_parser, "PIHandler");
xml_set_default_handler($xml_parser, "defaultHandler");
xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");
if (!($fp = @fopen($file, "r")))
{
return false;
}
if (!is_array($parser_file))
{
settype($parser_file, "array");
}
$parser_file[$xml_parser] = $file;
return array($xml_parser, $fp);
}
if (!(list($xml_parser, $fp) = new_xml_parser($file)))
{
die("could not open XML input");
}
echo "<pre>";
while ($data = fread($fp, 4096))
{
if (!xml_parse($xml_parser, $data, feof($fp)))
{
die(sprintf("XML error: %s at line %d\n",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
echo "</pre>";
echo "parse complete\n";
xml_parser_free($xml_parser);
Für jeder Information wäre ich dankbar