php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > XML
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


XML Hier passt alles rein, was das Thema XML (XSLT, JSON etc...) betrifft, auch in Verbindung mit PHP

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 07-02-2007, 10:38
absinth1986
 Newbie
Links : Onlinestatus : absinth1986 ist offline
Registriert seit: Nov 2006
Beiträge: 11
absinth1986 ist zur Zeit noch ein unbeschriebenes Blatt
Standard simpleXML Werte von Attributen auslesen

hi!

Ich habe folgendes Problem und hoffe ihr könnt mir helfen..

Zitat:
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1024pt" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" height="1100pt" >
<g transform="translate(1047.25, 19.5) rotate(-270)" style="fill:#ffffff; fill-rule:evenodd; stroke:#000000; stroke-width:0pt; stroke-linecap:butt; stroke-linejoin:miter; stroke-dasharray:none;" >
<path d="M0 0 C0 0 533 0 533 0 C533 0 533 1047 533 1047 C533 1047 0 1047 0 1047 C0 1047 0 0 0 0 Z" />
</g>
<g transform="translate(969.25, 46.5) rotate(-270)" style="fill:#00cd00; fill-rule:evenodd; stroke:#000000; stroke-width:0.0100049pt; stroke-linecap:butt; stroke-linejoin:miter; stroke-dasharray:none;" >
<path d="M0 0 C0 0 470 0 470 0 C470 0 470 100 470 100 C470 100 0 100 0 100 C0 100 0 0 0 0 Z" />
</g>
...
Dies ist ein ausschnitt aus einer datei die ich auslesen möchte..
ich habe bisher nicht viel mit xml zu tun gehabt aber ich soll im praktikum jetzt versuchen die attribute in eine mysql datenbank zu übertragen.

bisher habe ich herrausgefunden wie man mit simpleXML werte zwischen tags (z.b. <g>hier</g>) ausliest aber in meiner datei muss ich attribute (z.b. <g transform="translate(969.25, 46.5) rotate(-270)"></g>) auslesen, da es eine svg datei ist und dort nur gezeichnet wird.

ich brauche nur die werte von den attributen "transform", "style" und "d".

Leider habe ich bis jetzt einfach nichts dazu gefunden, wie ich die attribute auslesen kann.

ich hoffe mir kann jemand helfen.

Danke schon mal im Vorraus!
Mit Zitat antworten
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #2 (permalink)  
Alt 07-02-2007, 10:44
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard Re: simpleXML Werte von Attributen auslesen

Zitat:
Original geschrieben von absinth1986
Leider habe ich bis jetzt einfach nichts dazu gefunden, wie ich die attribute auslesen kann.
Definiere Auslesen.

Willst du von einem bestimmten Element die Attribute ermitteln? Dann halte ich "hab nix gefunden" für schlechten Scherz oder Frechheit - RTFM!

Oder willst du nach Elementen suchen, die bestimmte Attribute mit bestimmten Werten haben? Dann entweder die Elemente iterativ/rekursiv durchlaufen und selber "nachschauen", oder mit XPATH vertraut machen.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #3 (permalink)  
Alt 07-02-2007, 10:58
absinth1986
 Newbie
Links : Onlinestatus : absinth1986 ist offline
Registriert seit: Nov 2006
Beiträge: 11
absinth1986 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich möchte die werte zu transform="wert", style="wert" und d="wert" mit php auslesen und in eine mysql datenbank übertragen.

in allen tutorials die ich bis jetzt gefunden habe wird entweder nur auf zum beispielt das: <author>Name des Authors</author> eingegangen oder ich muss die quelldatei bearbeiten und dies reinschreiben "$xmlstr = <<<XML XML;".
das kann ich aber bei über 100 dateien nicht..

ich such schon seit ein paar tagen nach einem tutorial das mir helfen kann..

so wie ich es brauche konnt ich es in keinem tutorial finden und das soll kein scherz sein.

EDIT: Ok nach 2,5 Tagen Suche hab ich eben etwas gefunden dass mir weitergeholfen hat. Ich hoffe ihr lasst den Thread offen, dann kann ich immer weiter ergänzen, falls jemand mal das gleiche problem hat.

Geändert von absinth1986 (07-02-2007 um 11:11 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 08-02-2007, 09:49
absinth1986
 Newbie
Links : Onlinestatus : absinth1986 ist offline
Registriert seit: Nov 2006
Beiträge: 11
absinth1986 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich bin schon mal ein stück weiter aber hab wieder nen hänger..
ich kanns mir ehrlich nicht erklären warum es so nicht funktioniert.

Quelldatei (siehe oben)

PHP Script:
PHP-Code:
<?php
$file 
"../Park10.svg"//Pfad zur auszulesenden Datei
$park_id 1//Nummer des Parks

$db mysql_connect('localhost''user''passwd') OR die(mysql_error()); //Verbindung zu MySQL herstellen
      
mysql_select_db(friedhof_data$db) OR die(mysql_error()); //Verbindung zur Datenbank herstellen

$query "CREATE TABLE park_" $park_id "(
            id INT NOT NULL,
            transform VARCHAR(99999) NOT NULL,
            style VARCHAR(99999) NOT NULL,
            d VARCHAR(99999) NOT NULL,
            PRIMARY KEY(id))"
//Tabelle mit der Parknummer $park_id wird erstellt
$result mysql_query($query);

$xml simplexml_load_file($file); //auszulesende Datei wird geladen
?>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>XML Reader v0.1</title>
</head>
<body>

<?php
$i 
0//Laufvariable wird auf 0 gesetzt
foreach ($xml->as $node) { //1. Schleife wird gestartet

    
$transform[$i] = $node["transform"]; //Wert für Attribut "transform" wird ausgelesen
    
$style[$i] = $node["style"]; //Wert für Attribut "style" wird ausgelesen
    
echo $transform[$i];
    echo 
$style[$i];

    foreach (
$xml->g->path as $node2) { //2. Schleife wird gestartet

        
$d[$i] = $node2["d"]; //Wert für Attribut "d" wird ausgelesen
        
echo $d[$i];
    } 
//2. Schleife wird beendet
    
    
mysql_query("INSERT INTO park_" $park_id " VALUES('$i', '$transform[$i]', '$style[$i]', '$d[$i]')"$db); //Werte werden in die Datenbank übertragen

$i++; //Laufvariable wird automatisch um 1 erhöht
//1. Schleife wird beendet
?>

</body>
</html>
ich gebe die werte zur kontrolle (nur für mich) mit echo zwischendurch aus und dort ist mir aufgefallen das der wert von dem attribut "d" immer der gleiche ist, also immer der erste "M0 0 C0 0 533 0 533 0 C533 0 533 1047 533 1047 C533 1047 0 1047 0 1047 C0 1047 0 0 0 0 Z"

da zu jeder zeile in der datenbank eine "id", "transform", "style" und "d" gehört wäre es schon nich schlecht wenn es in der gleichen schleife mitläuft.

wieso wird es da nicht auch durchlaufen?

Geändert von absinth1986 (08-02-2007 um 09:55 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 08-02-2007, 10:15
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
foreach ($xml->as $node) { //1. Schleife wird gestartet 
OK, für jedes g wird jetzt ein Schleifendurchlauf gemacht, in dem dir der Inhalt dieses g in $node zur Verfügung steht.
PHP-Code:
    foreach ($xml->g->path as $node2) { //2. Schleife wird gestartet 
Welche g sind das hier?

(Wenn nicht mehrere path pro g vorkommen können, ist eine Schleife hier sowieso unsinnig.)
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #6 (permalink)  
Alt 08-02-2007, 10:22
absinth1986
 Newbie
Links : Onlinestatus : absinth1986 ist offline
Registriert seit: Nov 2006
Beiträge: 11
absinth1986 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

also ich schreib dir den aufbau nochmal ohne schnick schnack hier hin..

<svg>
<g>
<path>
</path>
</g>

<g>
<path>
</path>
</g>

...
</svg>

also in jedem <g> kommt nur ein mal <path> vor.
dann kann ich doch das 2. foreach weglassen ne? aber wie bekomme ich dann das attribut "d" jedesmal ausgelesen?
Mit Zitat antworten
  #7 (permalink)  
Alt 08-02-2007, 10:25
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von absinth1986
aber wie bekomme ich dann das attribut "d" jedesmal ausgelesen?
In dem du über das aktuelle g darauf zugreifst, und nicht über das erste.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #8 (permalink)  
Alt 08-02-2007, 10:38
absinth1986
 Newbie
Links : Onlinestatus : absinth1986 ist offline
Registriert seit: Nov 2006
Beiträge: 11
absinth1986 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ok das hört sich ja logisch an nur hab ich gedacht wenn oben in dem foreach "$xml->g as $node" steht, dass ich dann nur auf die attribute von <g> zugreifen kann.

also ich wüsste jetzt nicht wie ich in dieser schleife auf ein attribut von <path> zugreifen soll.

kannst du mir nicht einen denkanstoß geben
Mit Zitat antworten
  #9 (permalink)  
Alt 08-02-2007, 11:43
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von absinth1986
ok das hört sich ja logisch an nur hab ich gedacht wenn oben in dem foreach "$xml->g as $node" steht, dass ich dann nur auf die attribute von <g> zugreifen kann.
Du möchtest mit diesem Foreach mehrere g durchlaufen.
Damit du innerhalb dieser Schleife weisst, welches g gerade "aktuell" ist, benutzt du as $node - auf das jeweils aktuelle g hast du also im Schleifenkörper über $node Zugriff.
Zitat:
also ich wüsste jetzt nicht wie ich in dieser schleife auf ein attribut von <path> zugreifen soll.
Du willst auf den path zugreifen, der unterhalb des in diesem Schleifendurchlauf "aktuellen" g liegt.
Zitat:
kannst du mir nicht einen denkanstoß geben
Anstoss genug?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #10 (permalink)  
Alt 08-02-2007, 13:42
absinth1986
 Newbie
Links : Onlinestatus : absinth1986 ist offline
Registriert seit: Nov 2006
Beiträge: 11
absinth1986 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
foreach ($xml->as $node) { //Schleife wird gestartet

    
$transform[$i] = $node["transform"]; //Wert für Attribut "transform" wird ausgelesen
    
$style[$i] = $node["style"]; //Wert für Attribut "style" wird ausgelesen
    
$d[$i] = $node->path["d"]; //Wert für Attribut "d" wird ausgelesen
$i++;

ich hab es jetzt so gemacht, keine ahnung ob das eine elegante lösung ist aber es funktioniert
das problem war ich wusste nicht dass man es auch so schreiben kann "$node->path["d"]"

EDIT:
so jetzt komm ich wieder bei einem problem an
die quelldatei ist zur mitte hin dann plötzlich anders aufgebaut..
heißt nicht mehr
Zitat:
<g>
<path>
</g>
sondern
Zitat:
<g>
<text>
<tspan></tspan>
</text>
</g>
das könnte man doch höchstens mit if-else lösen oder?
also das script rödelt ja jedes <g> ab und das man in dieser schleife jedes mal abfragt..
PHP-Code:
if ($style[$i] = "") { .. }
else { 
weiterlaufen lassen 
oder gibt es mit xml dort eine einfachere lösung?

Geändert von absinth1986 (08-02-2007 um 14:01 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

10 Gründe, warum das Todesstern-Projekt gescheitert ist
10 Gründe, warum das Todesstern-Projekt gescheitert istDie Todesstern-Projekte sind spektakulär gescheitert. Lernen Sie von den Fehlern des Imperiums und bewahren Sie Ihre Projekte davor, der dunklen Seite der Macht zu verfallen!

24.11.2020 | Berni

Projektmanagement-Grundlagen Was ist ein PMO?
Projektmanagement-Grundlagen Was ist ein PMO?In unserer Infografik erfahrt ihr es.

02.11.2020 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

21.10.2020 Berni | Kategorie: PHP/ Anzeigenmarkt
Sendeplan Script inkl. Wunsch- und Grußbox + Kick-System + Bewerbungssystem

Das professionelle Sendeplan PHP Script inkl. Wunsch- und Grußbox + Kick-System für dein Webradio. Der übersichtliche Sendeplan bietet deinen Moderatoren und Zuhörern die perfekte Übersicht der aktuellen Shows! Du kannst nicht nur Sendungen eintragen, s

20.10.2020 drcomputer | Kategorie: PHP/ Web Radio
Newsmanager 2

Der Newsmanager 2 ist sehr Vielfältig und kann News schreiben, Newsletter versenden und RSS Feeds in einem erzeugen.

20.10.2020 Stephan_1972 | Kategorie: PHP/ News
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:18 Uhr.