SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Websites optimieren für Google & Co.

Websites optimieren für Google & Co. zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 18.05.2007, 10:58:44
Schnueffler Schnueffler ist offline
Anfänger
 
Registriert seit: May 2007
Beiträge: 4
Daten aus XML in Namespace lesen

Hallo

Ich versuche schon seit einiger Zeit eine XML-Datei in PHP zu parsen. Leider habe ich bis jetzt immer noch Probleme mit den Daten, die in einem bestimmten Namespace liegen.

Ich möchte eine GPX-Datei einlesen und mit einer anderen GPX vergleichen. Wenn die Daten in der zweiten Datei nicht vorhanden sind, dann sollen Sie dort eingefügt werden. Das Einlesen klappt auch soweit sehr gut, nur leider komme ich nicht an die Daten ran, die im Namespace "groundspeak" liegen. Wie kann ich diese Daten lesen und in der Zeildatei auch wieder genauso einfügen?

Code:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<gpx xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/0" version="1.0" creator="Groundspeak Pocket Query" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.groundspeak.com/cache/1/0 http://www.groundspeak.com/cache/1/0/cache.xsd">
  <name>All New</name>
  <desc>Geocache file generated by Groundspeak</desc>
  <author>Groundspeak</author>
  <time>2007-02-13T21:49:49.2832334-08:00</time>
  <keywords>cache, geocache, groundspeak</keywords>
  <bounds minlat="42.765117" minlon="6.0872" maxlat="54.612" maxlon="18.430167"/>
  
  <wpt lat="50.076033" lon="10.753183">
    <time>2007-03-24T00:00:00.0000000-08:00</time>
    <name>GCKB4O</name>
    <desc>Haßberg Stammtisch... by coldfinger, Event Cache (1.5/1)</desc>
    <url>http://www.geocaching.com/seek/cache_details.aspx?guid=c6378fa0-c289-4e73-bc98-4d1245d0d759</url>
    <urlname>Haßberg Stammtisch...</urlname>
    <sym>Geocache</sym>
    <type>Geocache|Event Cache</type>
    
    <groundspeak:cache xmlns:groundspeak="http://www.groundspeak.com/cache/1/0" id="165626" available="True" archived="False">
      <groundspeak:name>Haßberg Stammtisch...</groundspeak:name>
      <groundspeak:placed_by>coldfinger</groundspeak:placed_by>
      <groundspeak:owner id="100787">coldfinger</groundspeak:owner>
      <groundspeak:type>Event Cache</groundspeak:type>
      <groundspeak:container>Not chosen</groundspeak:container>
      <groundspeak:difficulty>1.5</groundspeak:difficulty>
      <groundspeak:terrain>1</groundspeak:terrain>
      <groundspeak:country>Germany</groundspeak:country>
      <groundspeak:state>
      </groundspeak:state>
      <groundspeak:short_description html="False">Eine Einladung zu einem regelmäßigen Stammtisch. Nächster Termin: Samstag, 24.03.07 18:00</groundspeak:short_description>
      <groundspeak:long_description html="False">
      
      </groundspeak:long_description>
      
      <groundspeak:encoded_hints></groundspeak:encoded_hints>
      
      <groundspeak:logs>
        <groundspeak:log id="22937864">
          <groundspeak:date>2007-01-29T08:00:00</groundspeak:date>
          <groundspeak:type>Write note</groundspeak:type>
          <groundspeak:finder id="100787">coldfinger</groundspeak:finder>          
          <groundspeak:text encoded="False">Vielen Dank</groundspeak:text>
        </groundspeak:log>        
      </groundspeak:logs>

    </groundspeak:cache>
  </wpt>
</gpx>
Mit Zitat antworten
  #2  
Alt 21.05.2007, 11:31:58
Schnueffler Schnueffler ist offline
Anfänger
 
Registriert seit: May 2007
Beiträge: 4
AW: Daten aus XML in Namespace lesen

Ist niemand da, der mit mit meinem Problem helfen kann????
Mit Zitat antworten
  #3  
Alt 23.05.2007, 08:46:38
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Daten aus XML in Namespace lesen

Zitat:
Zitat von Schnueffler Beitrag anzeigen
Ist niemand da, der mit mit meinem Problem helfen kann????
Ohne Script?
Mit Zitat antworten
  #4  
Alt 23.05.2007, 12:08:24
Schnueffler Schnueffler ist offline
Anfänger
 
Registriert seit: May 2007
Beiträge: 4
AW: Daten aus XML in Namespace lesen

PHP-Code:
<?php
    
//globale Einstellungen
    
$DEBUG         0;            # aktiviert die Debugausgabe, während des mergens
    
$DELTEFILE     1;            # löscht die Datei temporäre Datei nach dem Verarbeiten

?>



<?php
    
function OpenGPX($filename)
    {
        if (!
file_exists($filename))
            die (
"Die Datei ($filename) existiert nicht.");
        
$XML simplexml_load_file($filename);

        if (!
$XML)
            die (
"Kann die Datei ($filename) nicht öffnen.");
        return 
$XML;
    }

    function 
MergeWaypoint(SimpleXMLElement &$xml1SimpleXMLElement $xml2$counter)
    {
       
$dom1 = new DomDocument();
       
$dom2 = new DomDocument();
       
$dom1->loadXML($xml1->asXML());
       
$dom2->loadXML($xml2->wpt[$counter]->asXML());

       
$xpath = new domXPath($dom2);
       
$xpathQuery $xpath->query('/*/*');

       
$node $dom1->createElement("wpt");
       
$Sub $dom1->documentElement->appendChild($node);
       
$Sub->setAttribute("lat", (string)$xml2['lat']);
       
$Sub->setAttribute("lon", (string)$xml2['lon']);

       for (
$i 0$i $xpathQuery->length$i++)
           
$Sub->appendChild($dom1->importNode($xpathQuery->item($i), true));

       
$xml1 simplexml_import_dom($dom1);
    }



    function 
deleteLogEntries(SimpleXMLElement &$xml)
    {
        
$doc = new DOMDocument;

        
$doc->loadXML($xml->asXML());
        
$nodeList $doc->getElementsByTagNameNS('http://www.groundspeak.com/cache/1/0''logs');
        foreach(
$nodeList as $element)
            
$element->parentElement->removeChild($nodeList);

        
#unset($element);


        #$xp = new DOMXPath($doc);
        # $nodeList = $xp->query('groundspeak:logs');//DOMXPath::query() liefert eine DOMNodeList zurück

    
}


?>

<html>
    <head>
    </head>


    <body>
        <?PHP
            $uploaddir             
'upload/';
            
$Databasefile         'Database.gpx';
            
$MergedWaypoints     0;
            
$counter            0;

            if (!
file_exists($uploaddir)) mkdir($uploaddir,0777);

        
#Datei wurde hochgeladen
            
if(isset($_POST['send']) && $_POST['send'] == "ja")
            {
                if (
$DEBUG)
                    echo 
$_FILES['userfile']['tmp_name'] . "<br>\n";
            
#Erzeugen eines eindeutigen Dateinamens ...
                
$tmpfname             tempnam (realpath($uploaddir), 'GPX_');
                if (
$DEBUG)    echo $tmpfname  "<br>\n";

            
#...und umkopieren in das Upload-Dir
                
if(move_uploaded_file($_FILES['userfile']['tmp_name'], $tmpfname))
                    if (
$DEBUG)
                        echo 
"Datei erfolgreich hochgeladen.<br>\n";
                else
                {
                    if (
$DEBUG)
                    {
                        echo 
"Fehler beim Hochladen der Datei. Fehlermeldung:\n<br />";
                        
print_r($_FILES);
                    }
                }

            
#Öffnen der neuen und existieren GPX-Datei zum Vergleich
                
$XMLSource OpenGPX($tmpfname);
                
$XMLDest   OpenGPX($Databasefile);

            
#Vergleichen, ob ein neuer WP schon vorhanden ist
                
if ($DEBUG)
                    echo 
'Datei ' $tmpfname .' wird bearbeitet.<br>'."\n";

                echo 
'Datei wird in die Datenbank gemerged:<br>'."\n";
                foreach (
$XMLSource->wpt as $SourceWaypoint)
                {

                    
$found false;

                    if (
$DEBUG)
                        echo 
"<br>Source: ".($SourceWaypoint->name)."<br>";
                    foreach (
$XMLDest->wpt as $DestWaypoint)
                    {
                        if (
$DEBUG)
                            echo 
"DB: ".($DestWaypoint->name)."<br>";
                        if ((string)(
$SourceWaypoint->name) == (string)($DestWaypoint->name))
                        {
                            
$found true;
                            break;
                        }
                    }
                    if (!
$found)
                    {
                        
MergeWaypoint($XMLDest$XMLSource$counter);
                        
$MergedWaypoints++;
                    }
                    
$counter++;
                }
                echo 
"<br><br>".'Es wurde'.($MergedWaypoints>1?'n ':' ') . $MergedWaypoints ' Waypoint' . ($MergedWaypoints>1?'s':'') . ' in die Zieldatei gemerged.';

            
#Entfernen der Logeinträge
                
deleteLogEntries($XMLDest);

            
#Speichern der geänderten Daten
                
$XMLDest->asXML("Result.gpx");

            
#Löschen der temporären Datei nachdem sie bearbeitet wurde
                
if ($DELTEFILE)
                    
unlink($tmpfname);
    
?>
            <br><br><a href="<?PHP echo $PHP_SELF?>">Noch eine Datei hochladen</a>

    <?php
        
}
        else
        {
    
?>

    <form enctype="multipart/form-data" action="<?PHP echo $PHP_SELF?>" method="post">
    <input type="file" name="userfile" />
    <input type="hidden" name="send" value="ja" />
    <input type="submit" value="Datei hochladen" />
    </form>

    <?php
        
}
    
?>

    </body>
</html>

Zum Testen hatte ich noch mal ein gekürztes Script geschrieben, mit welchem ich veruscht habe, auf den NS zuzugreifen. Leider ging das nicht so ganz.
PHP-Code:
<?php

$dom 
= new DOMDocument;

// load the XML string defined above
$dom->load("Result2.gpx");

foreach (
$dom->getElementsByTagNameNS('http://www.groundspeak.com/cache/1/0''logs') as $element)
{
   echo 
'local name: '$element->localName', prefix: '$element->prefix', Value: '$element->nodeValue"<br>\n";
}

?>
Das Problem ist, dass das Ganze schon 2 Montae her ist, und bis jetzt aufgrund meines Umzuges brach lag. Daher bin ich nicht mehr ganz so in den Scripten drin und weiss auch nicht mehr, wie der aktuelle Stand aussah. Aber ich hoffe, dass ihr mir trotzdem helfen könnt.
Mit Zitat antworten
  #5  
Alt 23.05.2007, 20:49:47
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Daten aus XML in Namespace lesen

Zitat:
Zitat von Schnueffler Beitrag anzeigen
Aber ich hoffe, dass ihr mir trotzdem helfen könnt.
Das ist die Frage, ob es hier jemanden gibt, der sich genauer mit gpx auskennt.
Mit Zitat antworten
  #6  
Alt 29.08.2007, 18:27:47
Schnueffler Schnueffler ist offline
Anfänger
 
Registriert seit: May 2007
Beiträge: 4
AW: Daten aus XML in Namespace lesen

Lang lang ist'e her, dass ich diese Anfrage gestellt habe. Leider habe ich bis jetzt immer noch keine Lösung. Hat jemand von Euch noch ne Idee, wie ich an meine Daten kommen kann?
Mit Zitat antworten
  #7  
Alt 03.09.2007, 01:20:37
defabricator defabricator ist offline
Senior Member
 
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
AW: Daten aus XML in Namespace lesen

Also ich habe Dein Testskript mit den Daten aus dem ersten Post getestet (php 5.2.3) und es gibt aus:
Zitat:
local name: logs, prefix: groundspeak, Value:

2007-01-29T08:00:00
Write note
coldfinger
Vielen Dank

<br>
Ist das nicht das gewünschte Ergebnis?
Mit Zitat antworten
  #8  
Alt 03.09.2007, 01:21:14
defabricator defabricator ist offline
Senior Member
 
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
AW: Daten aus XML in Namespace lesen

Zitat:
Zitat von meikel Beitrag anzeigen
Das ist die Frage, ob es hier jemanden gibt, der sich genauer mit gpx auskennt.
nein, das ist eine reine xml/php Frage.
Mit Zitat antworten
  #9  
Alt 03.09.2007, 01:55:21
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Daten aus XML in Namespace lesen

Zitat:
Zitat von defabricator Beitrag anzeigen
nein, das ist eine reine xml/php Frage.
Aha...
Zitat:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<gpx xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/0" version="1.0" creator="Groundspeak Pocket Query" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.groundspeak.com/cache/1/0 http://www.groundspeak.com/cache/1/0/cache.xsd">
<name>All New</name>
Mit Zitat antworten
  #10  
Alt 03.09.2007, 02:23:19
defabricator defabricator ist offline
Senior Member
 
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
AW: Daten aus XML in Namespace lesen

Und? Das ist eine xml Datei. Und die Frage ist nur, wie man mit php aus einer xml Datei Elemente eines bestimmten Namespaces auswählt bzw wie man deren Daten herankommt.
Wer sich mit der Verarbeitung von XML Daten in PHP ein wenig auskennt, kann die Frage ohne besondere Kenntnisse des konkreten Formats beantworten.
Allerdings glaube ich, der OP hat sich die Frage im Grunde bereits selbst beantwortet, denn das Testskript gibt auf meinem Rechner das (scheint mir zumindest so) richtige Ergebnis aus.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Daten zu den vorhandenen dazuaddieren pekobe MySQLi/PDO/(MySQL) 2 27.05.2006 11:40:17
Daten von PHP an PHP übergeben! OlliT PHP für Fortgeschrittene und Experten 4 02.11.2004 11:16:55
Wie gebe ich Daten formatiert aus. Blue7 MySQLi/PDO/(MySQL) 6 24.02.2004 01:26:38
Daten aus 2 mysql-tabellen ausgeben xnay PHP Grundlagen 1 13.12.2003 18:33:43
daten an php script übergeben c-m-m PHP für Fortgeschrittene und Experten 2 28.10.2002 10:33:44


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:58:48 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt