jo73: Meldungen in XML nach Kriterien selektieren

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 <codes codetype="thema" nur T/AAA oder T/DDD enthalten.

Hierzu ein Beispiel einer 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:

if(!preg_match('/<titel>(.+?)<\/titel>/is',$xml,$arr)) continue;  
$time = $arr[1];

Wie gesagt möchte ich nun 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 Ihr könnt mir bei dieser Fragestellung weiterhelfen.

Schon vorab vielen Dank.

Gruß

Jo

  1. Hi,

    beschäftige dich doch mal mit der Verarbeitung von XML durch geeignete Bibliotheken. DOM, SAX, XPATH mal als Stichworte willkürlich in den Raum geworfen. "SimpleXml" schneit mir da grad noch so von der Seite ins Gedächtnis. Und das PHP Manual scheint auch ein paar Infos dazu zu haben.
    Das sollte definitiv mehr (Erfolg) bringen, als so ein Rumgefrickel mit Regular Expressions.

    Ciao, Frank

    1. ...mal angenommen ich würde ein "Rumgefrickel" mit Regular Expressions durchführen wollen, ist dann das folgende Script richtig, um sowohl T/AAA oder/und T/DDD unter vielen anderen "Thema-codes" korrekt auslesen zu können, oder bricht dieser Script irgendwo ab?

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

      Danke für die Rückinfo.

      Jo

      Hi,

      beschäftige dich doch mal mit der Verarbeitung von XML durch geeignete Bibliotheken. DOM, SAX, XPATH mal als Stichworte willkürlich in den Raum geworfen. "SimpleXml" schneit mir da grad noch so von der Seite ins Gedächtnis. Und das PHP Manual scheint auch ein paar Infos dazu zu haben.
      Das sollte definitiv mehr (Erfolg) bringen, als so ein Rumgefrickel mit Regular Expressions.

      Ciao, Frank

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

        ...mal angenommen ich würde ein "Rumgefrickel" mit Regular Expressions durchführen wollen, ist dann das folgende Script richtig, um sowohl T/AAA oder/und T/DDD unter vielen anderen "Thema-codes" korrekt auslesen zu können, oder bricht dieser Script irgendwo ab?

        Gegenfrage(n):

        • soll was abbrechen? von dem Script ist nicht viel zu sehen.
        • wofür gilt denn das "continue"? für If? wäre WHILE da nicht besser geeignet?
        • aufgrund der Klammern, nehme ich an, du bekommst 3 Captures im Erfolgsfall. Deswegen willst du aus dem Array wohl auch das zweite haben
        • aber da steht dann nur T/AAA oder T/DDD drin, eine Zeichenkette ohne unmittelbaren Bezug zum restlichen XML drum herum
        • ansonsten: probieren geht über studieren, also schon ausprobiert?

        Ciao, Frank