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
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
18.05.2007, 10:58:44
|
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>
|
21.05.2007, 11:31:58
|
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????
|
23.05.2007, 08:46:38
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
|
|
AW: Daten aus XML in Namespace lesen
Zitat:
Zitat von Schnueffler
Ist niemand da, der mit mit meinem Problem helfen kann????
|
Ohne Script?
|
23.05.2007, 12:08:24
|
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 &$xml1, SimpleXMLElement $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.
|
23.05.2007, 20:49:47
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
|
|
AW: Daten aus XML in Namespace lesen
Zitat:
Zitat von Schnueffler
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.
|
29.08.2007, 18:27:47
|
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?
|
03.09.2007, 01:20:37
|
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?
|
03.09.2007, 01:21:14
|
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
Das ist die Frage, ob es hier jemanden gibt, der sich genauer mit gpx auskennt.
|
nein, das ist eine reine xml/php Frage.
|
03.09.2007, 01:55:21
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
|
|
AW: Daten aus XML in Namespace lesen
Zitat:
Zitat von defabricator
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>
|
|
03.09.2007, 02:23:19
|
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.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 00:32:51 Uhr.
|