php-resource



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

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 29-12-2009, 16:03
jo73
 Registrierter Benutzer
Links : Onlinestatus : jo73 ist offline
Registriert seit: Dec 2006
Beiträge: 39
jo73 ist zur Zeit noch ein unbeschriebenes Blatt
Standard XML Infos definiert auslesen

Hallo zusammen,

eine kleine Detailfrage zum Thema XML auslesen.

Ich möchte aus auf einem Server bereitgestellen Dokumenten nur Meldungen auf meiner Website darstellen, die unter code codetype thema nur T/AAA oder T/DDD enthalten. Der Ausschnitt aus dem XML sieht wie folgt aus:

<codes codetype="region">D/EU,US/AM,R/AS,K/AF</codes>
<codes codetype="land">D/DEU,E/ENG,O/OEST</codes>
<codes codetype="thema">T/AAA,T/BBB,T/CCC,T/DDD,I/FFF</codes>

Ich hab dies mit dem Befehl:

if(!preg_match('/<codes codetype=\'thema\'>T/AAA, T/DDD(.+?)<\/codes>/is',$xml,$arr)) continue;
$time = $arr[1];

versucht. Funktioniert aber leider (noch) nicht.

Kann mir hier jemand bei diesem Detail weiterhelfen?

Schon vorab vielen Dank.

Jo
Mit Zitat antworten
  #2 (permalink)  
Alt 29-12-2009, 16:36
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Erstmal verwendest du bitte Code-Tags!

Dann schaust du dir die DOM Klassen von PHP an, mit denen du wesentlich bequemer an einzelne Tags rankommst und somit später nur auf den Text-Inhalt matchen musst, statt XML-Syntax zu berücksichtigen!
Mit Zitat antworten
  #3 (permalink)  
Alt 29-12-2009, 17:07
jo73
 Registrierter Benutzer
Links : Onlinestatus : jo73 ist offline
Registriert seit: Dec 2006
Beiträge: 39
jo73 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke für die Rückinfo.

Wie sieht dies aber konkret aus, da ich ja bereits alle Meldungen korrekt abrufen und darstellen kann, ich nun aber aus allen Meldungen nur gewisse (die mit thema T/AAA und T/DDD) selektieren und darstellen möchte?

Die Lösung basiert derzeit bereits auf:

PHP-Code:
if(!preg_match('/<codes codetype=\'thema\'>T/AAA, T/DDD(.+?)<\/codes>/is',$xml,$arr)) continue;
$time $arr[1]; 
Nur das spezielle Selektieren funktioniert halt noch nicht.

Wäre schön hierbei Hilfe zu bekommen.

Jo
Mit Zitat antworten
  #4 (permalink)  
Alt 29-12-2009, 17:38
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

Das ganze konkret zu machen, dafür bist du da. Wir geben dir nur die Hinweise, wie es geht.

unset sagte ja bereits, dass du dir mal die DOM-Klassen (suchen) von PHP ansehen sollst.

Also, XML-Datei parsen (suchen), dann hast du schonmal ein Objekt, dass du dann "durchlaufen" kannst.

Für jeden Datensatz suchst du dir dann die codex-elemente raus und filterst dann noch die mit dem entsprechenden Attribut raus.

Letztendlich ist es dann nur noch ein simples preg_match oder eine Stringsuche um zu entscheiden, ob der aktuelle Datensatz ausgegeben wird oder nicht.

OffTopic:
ich hab jetzt wahrscheinlich mehr geschrieben, als wenn ich dir den fertigen quelltext gegeben hätte, aber so lernst du mehr.
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #5 (permalink)  
Alt 29-12-2009, 17:56
jo73
 Registrierter Benutzer
Links : Onlinestatus : jo73 ist offline
Registriert seit: Dec 2006
Beiträge: 39
jo73 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Für jeden Datensatz suchst du dir dann die codex-elemente raus und filterst dann noch die mit dem entsprechenden Attribut raus.
...genau um dies geht es.
Wie ja gesagt läuft der Script bereits, das parsen war erfolgreich und ich habe mit preg_match den Script funktionsfähig aufgebaut. Mir geht es hier nicht um eine Gesamtlösung, nur dass das selektieren irgendwie nicht klappen will und ich den potentiellen Fehler in:

PHP-Code:
if(!preg_match('/<codes codetype=\'thema\'>T/AAA, T/DDD(.+?)<\/codes>/is',$xml,$arr)) continue;
$time $arr[1]; 
nicht erkenne. Hierzu suche ich support.

Gruß

Jo
Mit Zitat antworten
  #6 (permalink)  
Alt 29-12-2009, 18:23
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Das mit preg_match zu machen ist quatsch, wenn du doch schon bequeme XML bzw DOM Klassen zur Verfügung hast. Jetzt schau dir das doch mal endlich an.
Mit Zitat antworten
  #7 (permalink)  
Alt 29-12-2009, 18:24
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Vergleich doch mal das rohe XML mit dem was du als regulären Ausdruck verwendest!
Code:
<codes codetype="thema">T/AAA,T/BBB,T/CCC,T/DDD,I/FFF</codes>
<codes codetype=\'thema\'>T/AAA, T/DDD(.+?)<\/codes>
Der Ausdruck matcht nur, wenn thema von ' umschlossen ist. Ist es aber nicht. Es sind ".
Und er matcht nur, wenn T/AAA und T/DDD direkt aufeinanderfolgen. Tun sie aber nicht.
Und vor allem verwendest du / als Delimiter des gesamten Ausdrucks, hast aber die Slashes in T/XXX nicht maskiert. Deswegen kann preg_match mit dem Ausdruck überhaupt nichts anfangen.
Mit Zitat antworten
  #8 (permalink)  
Alt 29-12-2009, 18:25
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Wie ja gesagt läuft der Script bereits, das parsen war erfolgreich und ich habe mit preg_match den Script funktionsfähig aufgebaut. Mir geht es hier nicht um eine Gesamtlösung, nur dass das selektieren irgendwie nicht klappen will
Die Erfahrung hat gezeigt, dass die meisten User nach der empfohlenen Umsetzung besser gefahren sind.

Dies hätte auch dein Problem minimiert.

Wenn entweder der eine String, oder der andere vorkommen soll, dann drück das auch so aus:

(T/AAA|T/DDD)

Der RegExp-Evaluator - RegExp-Tutorial - Metazeichen

Escapen natürlich nicht vergessen
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #9 (permalink)  
Alt 29-12-2009, 19:19
jo73
 Registrierter Benutzer
Links : Onlinestatus : jo73 ist offline
Registriert seit: Dec 2006
Beiträge: 39
jo73 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke für die Tipps, dazu zwei Anmerkungen.

Nach meiner Meinung können auch " mit ' dargestellt werden. Dies funktioniert ja auch in meinem Script, obwohl in der XML-Datei die " anstatt ' vorhanden sind.
Darüber hinaus habe ich gedacht, dass ein normaler Slash in (T/AAA|T/DDD) nicht zu maskieren ist, oder?

Ich habe nun Eure Hinweise wie folgt integriert:

PHP-Code:
if(!preg_match('/<codes codetype=\'thema\'\'(T/AAA|T/DDD)\'>(.+?)<\/codes>/is',$xml,$arr)) continue; 
aber danach die Fehlermeldung:

Warning: preg_match() [function.preg-match]: Unknown modifier 'A' in ...
oder bei einer Modifikation von / bzw. ' auch:
Warning: preg_match() [function.preg-match]: Unknown modifier '(' in ...
oder auch:
Warning: preg_match() [function.preg-match]: Unknown modifier '|' in ...
erhalten.

Irgendwas läuft bei der Aneinanderreihung von thema T/AAA und T/DDD falsch, oder?

Gruß

Jo
Mit Zitat antworten
  #10 (permalink)  
Alt 29-12-2009, 19:26
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Nach meiner Meinung können auch " mit ' dargestellt werden. Dies funktioniert ja auch in meinem Script, obwohl in der XML-Datei die " anstatt ' vorhanden sind.
Dein Script funktioniert doch gar nicht. Oder redest du von etwas anderem, von dem wir keine Kenntnis besitzen?

Zitat:
Darüber hinaus habe ich gedacht, dass ein normaler Slash in (T/AAA|T/DDD) nicht zu maskieren ist, oder?
Ist falsch. Und zu dem Zeitpunkt gab es noch gar keine Klammern.

Zitat:
Warning: preg_match() [function.preg-match]: Unknown modifier 'A' in ...
Womit wir wieder beim Thema Delimiter wären, bzw. Escapen. Hast unsere Hinweise also noch nicht befolgt.

Zitat:
Irgendwas läuft bei der Aneinanderreihung von thema T/AAA und T/DDD falsch, oder?
Japp, den Hinweis haben wir dir aber schon (mehrfach) gegeben. (siehe auch Punkt 3)
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #11 (permalink)  
Alt 29-12-2009, 20:41
jo73
 Registrierter Benutzer
Links : Onlinestatus : jo73 ist offline
Registriert seit: Dec 2006
Beiträge: 39
jo73 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das Thema Delimiter/Escapen mit hinten und vorne angeordneten Backslash (-> /begriff/) ist mir eigentlich schon klar, so habe ich es ja auch gemacht.

Aber vielleicht reden wir wirklich ein bisschen aneinander vorbei.

Also nochmal:

Eine der Beispiel Meldung in XML:

</ElementType>
<ElementType name="version" content="textOnly" model="closed" dt:type="number" />
<ElementType name="uniqueid" content="textOnly" model="closed" dt:type="string" />
<ElementType name="titel" content="textOnly" model="closed" dt:type="string" />
<ElementType name="codes" content="mixed" model="closed">
<AttributeType name="codetype" dt:type="enumeration" dt:values="region land thema" />
<attribute type="codetype" required="yes" />
</ElementType>
<version>1.0</version>
<uniqueid>1234567</uniqueid>
<titel>bla, bla</titel>
<codes codetype="region">D/EU,US/AM,R/AS,K/AF</codes>
<codes codetype="land">D/DEU,E/ENG,O/OEST</codes>
<codes codetype="thema">T/AAA,T/BBB,T/CCC,T/DDD,I/FFF</codes>

so, nun stelle ich derzeit alle Meldungen wie folgt dar, was auch funktioniert:

PHP-Code:
if(!preg_match('/<titel>(.+?)<\/titel>/is',$xml,$arr)) continue;
$time $arr[1]; 
Nun möchte ich aber weiter einschränken und nur die Meldungen darstellen, welche den codetype thema und hier nur T/AAA und T/DDD haben.

Hier genau habe ich das Problem, um die drei genannten Begriffe wie bereits oben geschildert zu selektieren.

Ich hoffe dies konnte ein wenig zur Klärung meiner Fragestellung beitragen.

Gruß

Jo
Mit Zitat antworten
  #12 (permalink)  
Alt 29-12-2009, 21:24
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Das Thema Delimiter/Escapen mit hinten und vorne angeordneten Backslash (-> /begriff/) ist mir eigentlich schon klar, so habe ich es ja auch gemacht.
Das stimmt doch nicht. Du verwendest den Delimiter / und gleichzeitig verwendest du / ohne sie zu escapen.

Zitat:
Eine der Beispiel Meldung in XML:
Ohne deinen Vollständigen Code zu kennen, vermute ich, dass das was du hast noch lange nicht reicht um das gewollte Ziel zu erreichen.

Zitat:
Hier genau habe ich das Problem, um die drei genannten Begriffe wie bereits oben geschildert zu selektieren.
Ja, hast du. Nur die eigenen Lösungsansätze fehlen noch. Du zeigst uns, welcher Code funktioniert. Nicht aber, was nicht funktioniert.

Jetzt gib uns bitte noch mal den Beispielcode von $xml (außer es ist der gerade gepostete) und natürlich auch deinen aktuellen PHP/RegEx versuch.
Bitte mit mit Ist- und Soll-Ergebnis.
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #13 (permalink)  
Alt 30-12-2009, 00:18
jo73
 Registrierter Benutzer
Links : Onlinestatus : jo73 ist offline
Registriert seit: Dec 2006
Beiträge: 39
jo73 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
if(!preg_match('<codes codetype=\"thema\">T\/AAA,T\/DDD(.+?)</codes>/is',$xml,$arr)) continue;
$time $arr[1]; 
...sieht das nun besser aus? Geht dies in die richtige Richtung?

Trotzdem kommt die Fehlermeldung:

Warning: preg_match() [function.preg-match]: Unknown modifier 'I' in

was ich gar nicht verstehe?!?

Gruß

Jo
Mit Zitat antworten
  #14 (permalink)  
Alt 30-12-2009, 00:28
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

Da kein großes I vorhanden ist, verstehe ichs auch nicht. Ich würde aber auf den ersten Blick noch mindestens ein weiteres / sehen, das nicht escaped wurde.

Und nochmal: Was steht in $xml drin?

Aber mir kommt es gerade so vor, als ob du eher Rückschritte machst. Wo sind die Klammern nun schon wieder hin? Versuch doch bitte mal alles was hier gesagt wurde, zu konsolidieren. Am besten in Form einer Checkliste. Und dann gibst du uns noch mal die Gesamtübersicht. Input, Code, Output und gewünschter Output.

Raten mag hier niemand.
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!

Geändert von TobiaZ (30-12-2009 um 00:32 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 30-12-2009, 00:41
jo73
 Registrierter Benutzer
Links : Onlinestatus : jo73 ist offline
Registriert seit: Dec 2006
Beiträge: 39
jo73 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

gesamtheitlich sieht es nun so aus:

PHP-Code:
$xml join(file($arrFTPXML['path'].$f));

if(!
preg_match('/<titel>(.+?)<\/titel>/is',$xml,$arr)) continue;
if(!
preg_match('<codes codetype=\"thema\">T\/AAA,T\/DDD(.+?)</codes>/is',$xml,$arr)) continue;
$time $arr[1]; 
Warum geht es in die falsche Richtung. Ich denke, dass Delimiter und Escapen nun korrekt ist.

Nur der Fehler mit 'I' ist sehr komisch?!?

Gruß

Jo
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
ZF definiert viele Variablen neu z.B. (int) phpMorpheus2 PHP Developer Forum 5 16-07-2009 22:13
Dir mit Klassen auslesen und Infos Abfragen ???? sp3s PHP Developer Forum 2 23-05-2007 11:54
Auslesen von Infos aus mehreren mysql Tabellen danix PHP Developer Forum 1 26-02-2006 01:27
MySQL5 - DATE falsch definiert wmg SQL / Datenbanken 4 18-01-2006 21:39
Werte bzw. Infos aus PDF-Datei auslesen? jimi-house BRAINSTORMING PHP/SQL/HTML/JS/CSS 2 19-09-2003 00:33

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

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 05:53 Uhr.