php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.11.2006, 12:30  
Benutzer
 
Registriert seit: 21.06.2005
Beiträge: 30
SolcoDerman
Standard XML-Seite mit PHP auslesen und in Array speichern

Hallo PHPler,

Ich hab wiedermal ein Problem, diesmal mit XML over PHP to MySQL

Das habe ich:
PHP 5.0.x
DOMXML
XML-Line
SimpleXML
XML-Datei
Skriptansatz:
PHP-Code:
<?php

$file 
"http://eq2players.station.sony.com/guilds/guild_roster_xml.vm?guildId=235301";

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 
"&lt;<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 
"&gt;";
}

function 
endElement($parser$name
{
   echo 
"&lt;/<font color=\"#0000cc\">$name</font>&gt;";
}

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($data01) == "&" && substr($data, -11) == ";") {
       
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($fp4096)) {
           if (!
xml_parse($parser$datafeof($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_parserXML_OPTION_CASE_FOLDING1);
   
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($fp4096)) {
   if (!
xml_parse($xml_parser$datafeof($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);


?>
Ziel: Auslesen der XML-Seite und mit vorhandener Tabelle vergleichen und bei Toleranz abgleichen.

Problem: Mit diesem Skript sehe ich die XML-Datei im WebBrowser, nur weiss ich nicht, wie ich die Einzelheiten in ein Array bekomme, um diese dann mit den MySQL-Daten zu vergleichen.



MfG Solcoderman
SolcoDerman ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.11.2006, 12:37  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Problem: Mit diesem Skript sehe ich die XML-Datei im WebBrowser, nur weiss ich nicht, wie ich die Einzelheiten in ein Array bekomme, um diese dann mit den MySQL-Daten zu vergleichen.
Was wie wo ?? ist das ein Copy Paste Script oder warum weißt du das nicht ???

Du willst also aus Members jeden Member in deine DB eintragen ?? Ja ?? Na dann mach das doch auch. einfach 'n INSERT oder wenn schon vorhanden UPDATE String zusammen bauen und den dann an die DB schicken ..



http://www.phpfriend.de/forum/viewto...t=xml+auslesen

einfach mal durchlesen was derjenige dort gemacht hat
Und Fortgeschritten ist das auch nicht

DIE SUCHE LÄSST GRÜSSEN
M3g4Star ist offline   Mit Zitat antworten
Alt 20.11.2006, 13:36  
Benutzer
 
Registriert seit: 21.06.2005
Beiträge: 30
SolcoDerman
Standard

Das Skript ist Copy&Past.
Und ich habe schon mehrfach die Board-, Google und PHP.Net-Suche besucht, aber nichts passendes für mein Problem gefunden.
Habe auch schon mehrfach an Skripts gebastelt, aber diese warfen immer falsche bzw. gar keine Ergebniss raus.
Habe auch schon versucht, die XML-Seite in eine lokale Datei zu speichern, nur das diese dann so aussah:

<?xml version="1.0"?>
<pre><code>
&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;
&lt;guild&gt;
&lt;details&gt;
&lt;id&gt;235301&lt;/id&gt;
&lt;name&gt;Custodes Draconis&lt;/name&gt;
&lt;server&gt;Valor&lt;/server&gt;
&lt;/details&gt;
&lt;members&gt;
&lt;member&gt;
&lt;name&gt;Fiola&lt;/name&gt;
&lt;prefixTitle&gt;&lt;/prefixTitle&gt;
&lt;level&gt;14&lt;/level&gt;
&lt;class&gt;Warlock (24)&lt;/class&gt;
&lt;artisanClass&gt;Unskilled (0)&lt;/artisanClass&gt;
&lt;artisanLevel&gt;1&lt;/artisanLevel&gt;
&lt;guildStatus&gt;100&lt;/guildStatus&gt;
&lt;dateJoined&gt;2006-11-17&lt;/dateJoined&gt;
&lt;guildRank&gt;Twink&lt;/guildRank&gt;
&lt;memberNumber&gt;212&lt;/memberNumber&gt;
&lt;/member&gt;

und ich dann beim auslesen der Datei auf Fehler stosse.
Eine normale XML-Datei hat er dann ganz normal behandelt.

MfG
SolcoDerman ist offline   Mit Zitat antworten
Alt 20.11.2006, 13:47  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

Du willst mich jetzt hier auf den Arm nehmen oder ???

Ich hab jetzt mal aus wirklich guter Laune nach dem Mittag einfach mal copy-paste das Script lokal bei mir eingefügt (einfach mal meinen vorherigen Post lesen und evlt. Links folgen):

PHP-Code:
<?php

$file
="http://eq2players.station.sony.com/guilds/guild_roster_xml.vm?guildId=235301";


$xml_parser xml_parser_create();

$handle fopen($file"rb");
$contents '';
while (!
feof($handle)) {
  
$data .= fread($handle8192);
}
fclose($handle);

xml_parse_into_struct($xml_parser$data$vals$index);
xml_parser_free($xml_parser);

$params = array();
$level = array();
foreach (
$vals as $xml_elem) {
  if (
$xml_elem['type'] == 'open') {
   if (
array_key_exists('attributes',$xml_elem)) {
     list(
$level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
   } else {
     
$level[$xml_elem['level']] = $xml_elem['tag'];
   }
  }
  if (
$xml_elem['type'] == 'complete') {
   
$start_level 1;
   
$php_stmt '$params';
   while(
$start_level $xml_elem['level']) {
     
$php_stmt .= '[$level['.$start_level.']]';
     
$start_level++;
   }
   
$php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];';
   
$item_array[$xml_elem['tag']] = $xml_elem['value'];
   eval(
$php_stmt);
  }
}

echo 
"<pre>";
print_r($item_array);
echo 
"</pre>";
?>

M3g4Star ist offline   Mit Zitat antworten
Alt 20.11.2006, 13:52  
Benutzer
 
Registriert seit: 21.06.2005
Beiträge: 30
SolcoDerman
Standard

Ja,ok.

Aber nach meinem Wissen ist das jetzt ein eindimensionales Array oder?

Ist es denn nicht möglich ein mehrdimensionales daraus zu machen?

[EDIT]
Oder besser gefragt:
Wie kann ich denn jetzt auf die einzelnen Elemente zugreifen?
[/EDIT]
SolcoDerman ist offline   Mit Zitat antworten
Alt 20.11.2006, 13:56  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

*lol* .. Jo .. da stimmt was nicht ^^



Auch gerade gesehen ^^ der leist nur den Quellcode ein anstatt die Elemente
M3g4Star ist offline   Mit Zitat antworten
Alt 20.11.2006, 14:01  
Benutzer
 
Registriert seit: 21.06.2005
Beiträge: 30
SolcoDerman
Standard

ok

Bin daher für jede Hilfe dankbar.

Alternativ hätte ich noch eine CSV-Datei zur Auswahl, wenn das einfacher ist?

CSV-Datei

MfG
SolcoDerman ist offline   Mit Zitat antworten
Alt 20.11.2006, 14:23  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

ok gibt mehrere Möglichkeiten jetzt auf dein Problem einzugehen.

Hab erstmal gesehen das der Parser Probleme mit der Dokument hat .. hab also mal die erste Zeile rausgenommen:

PHP-Code:
<?php

$file
="http://eq2players.station.sony.com/guilds/guild_roster_xml.vm?guildId=235301";

$xml_parser xml_parser_create();

$handle fopen($file"rb");
$contents '';
while (!
feof($handle)) {
  
$data .= fread($handle8192);
}
fclose($handle);

$data=str_replace('&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;',"",$data);

$data html_entity_decode($data);
#echo $data;

$xml_parser xml_parser_create();
xml_parse_into_struct($xml_parser$data$vals$index);
xml_parser_free($xml_parser);

$params = array();
$level = array();
foreach (
$vals as $xml_elem) {
  if (
$xml_elem['type'] == 'open') {
   if (
array_key_exists('attributes',$xml_elem)) {
     list(
$level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
   } else {

     
$level[$xml_elem['level']] = $xml_elem['tag'];
   }
  }
  if (
$xml_elem['type'] == 'complete') {
   
$start_level 1;
   
$php_stmt '$params';
   while(
$start_level $xml_elem['level']) {
     
$php_stmt .= '[$level['.$start_level.']]';
     
$start_level++;
   }
   
$php_stmt .= '[$xml_elem[\'tag\']][] = $xml_elem[\'value\'];';
   eval(
$php_stmt);
  }
}

echo 
"<pre>";
print_r ($params);
echo 
"</pre>";

?>
Vllt. stellt dich das ja zufrieden
Kannst die Elemente jetzt auch anders ablegen .. wie du ahlt willst
M3g4Star ist offline   Mit Zitat antworten
Alt 20.11.2006, 14:24  
Erfahrener Benutzer
 
Registriert seit: 02.08.2004
Beiträge: 472
duderino
Standard

http://de2.php.net/manual/de/function.fgetcsv.php
duderino ist offline   Mit Zitat antworten
Alt 20.11.2006, 14:31  
Benutzer
 
Registriert seit: 21.06.2005
Beiträge: 30
SolcoDerman
Standard

Zitat:
Zitat von M3g4Star
Vllt. stellt dich das ja zufrieden
Kannst die Elemente jetzt auch anders ablegen .. wie du ahlt willst
Ahh,
ich sehe Arrays "Gott sei dank" :wink:

Das ist genau die Lösung die ich haben wollte und da ich Wissensdurstig bin, kann du mir bestimmt sagen, was du geändert hast.

MfG
SolcoDerman ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
String aus einer Seite in Variable speichern KimKaye PHP Tipps 2008 10 14.05.2008 09:57
Verzeichnis auslesen -> Dateinamen in Array quoba PHP Tipps 2008 11 29.04.2008 16:21
Array Formatierung PHP Tipps 2006 3 17.01.2006 19:12
Spalte aus DB in einem Array speichern ? PHP Tipps 2006 3 06.01.2006 08:21
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
Sortieren von Arrays mit mehr als 2 Dimensionen (Teil 2) Buhmann PHP-Fortgeschrittene 4 12.07.2005 14:03
[Erledigt] Inhalt aus externer Seite auslesen. PHP Tipps 2005 8 06.05.2005 22:03
Assoziatives Array auslesen phpwiki PHP Tipps 2005 4 21.04.2005 13:27
Probleme mit Array auslesen PHP Tipps 2005 3 12.03.2005 18:03
Array wie auslesen? PHP Tipps 2005 7 07.03.2005 11:43
array in einer txt speichern PHP-Fortgeschrittene 4 10.02.2005 07:12
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
[Erledigt] Tabelle auf einer Seite auslesen und in meiner Seite wiederg PHP Tipps 2004 2 14.07.2004 08:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php xml array, php xml to array, xml to array, xml in php array einlesen, xml seite auslesen php, php xml nur teil eines arraya auslesen, php xml mehrfach vorhandene tags auslesen, php html seite als xml speichern, seite mit php auslesen und als xml speichern, php xml von seite laden, php webseite auslesen array, xmlseite, xml &gt richtig speichern, seite auslesen und vergleich, php xml seite als xml speichern, mit php xml seite speichern, website in einem array abspeichern php, php5 xml-seite auslesen, array in xml schreiben php, php xml ohne tags ausgeben

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:25 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.