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

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

Microweber CMS

Open source, drag and drop website builder

13.01.2020 Berni | Kategorie: HTML5/ EDITOR
PhoneGap Apps mit JS, CSS3 und HTML5 erstellen ansehen PhoneGap Apps mit JS, CSS3 und HTML5 erstellen

PhoneGap, Framework zur Erstellung hybrider Applikationen für mobile Endgeräte.

13.01.2020 Berni | Kategorie: App-Entwicklung
Bo)Tickets

Bo)Tickets bietet Ihnen eine Schnittstelle für Kundenanfragen an. In dem Script definieren Sie Supportbereiche, also zum Beispiel „Technik, Buchhaltung, Support“. Ihre Kunden können dann über ein Formular eine Anfrage abschicken.

31.12.2019 bocombo | Kategorie: PHP/ Ticketsystem
 Alle PHP Scripte anzeigen

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