Parsen einer XML-Datei trifft auf Problem

Alles, was PHP betrifft, kann hier besprochen werden.

Parsen einer XML-Datei trifft auf Problem

Postby juergen&lx » 28. July 2013 18:51

mit dem Parsen einer xml-Datei stoße ich auf eine kleines Problem.
hier ist ein nicht änderbares Code-Schnipsel:
many prior words Test<div><note type="x-studynote">eine Prüfung</note></div> more words

uns so sollte es aussehen:
many prior words <acronym title="eine Prüfung"> Test</acronym> more words

meine Frage dazu: wie kann ich das führende Wort vor dem <div> erkennen, damit ich das Ganze mit preg_replace() ändern und anzeigen kann?
Jürgen

weiter suchen und suche und such und suc und su und s und .......................[Kopfkratz]..wonach suche ich eigentlich?
juergen&lx
 
Posts: 154
Joined: 18. February 2004 21:36
Location: in einem Dorf am Rande des Strombergs
Operating System: Linux

Re: Parsen einer XML-Datei trifft auf Problem

Postby WilliL » 28. July 2013 19:34

Hallo Jürgen,
da kannst du dich nur durch die regulären Ausdrücke /Regular Expressions durchkämpfen
http://www.zytrax.com/tech/web/regex.htm

Ggf kannst dua auch nach Anfängen mit "many prior words" suchen, um dann das Wort/Wortgruppe vor dem <div> zu ermitteln.
Willi
WilliL
 
Posts: 660
Joined: 08. January 2010 10:54
Operating System: Win7Home Prem 64 SP1

Re: Parsen einer XML-Datei trifft auf Problem

Postby juergen&lx » 29. July 2013 23:34

Hallo Willi,

Danke für den Link. Die "Regular Expressions" haben schon so manchen verzweifeln lassen.

Bin jetzt zu folgender Lösung gekommen:
Code: Select all
$strings = 'many prior words Test<div><note type="x-studynote">eine Prüfung</note></div> more words ';
/**
 * Suchbedingungen für preg_replace erstellen:
 * Das "i" nach der Suchmuster-Begrenzung kennzeichnet eine Suche mit Groß-und Kleinschreibung
 *suche nach "oneWord<DIV>" als Start
 */
   $find1 = '/(\w*<DIV>)/i';
   preg_match_all($find1, $strings, $matches1);echo '<br>';
/** suche nach "any Words</NOTE>" zum Ende */
   $find2 = '/(studynote">\s*(.*?)\s*<\/NOTE>)/i';
   preg_match_all($find2, $strings, $matches2);echo '<br>';

/**
 * Die Ergebnisse in den Arrays $matches1 und $matches2 werden jetzt verfeinert.
 * aus den Array's wird jetzt <DIV> und </NOTE> entfernt um reine Ersetzungen zu erhalten
 */
foreach($matches1[0] as $match1){ $firstWordArr[] = preg_replace('/<DIV>/i','', $match1);}
foreach($matches2[0] as $match2){ $temp_Arr[] = preg_replace('/<\/NOTE>/i','', $match2);}
/** und hier wird nochmal das neue Array "temp_Arr" nachbearbeitet */
foreach($temp_Arr as $title){ $StudyNoteArr[] = preg_replace('/(studynote">)/i','', $title);}

$i = 0;
$Search = array();
/**
 * Da jetzt alle Array's aus preg_match die gleiche Zahl an Ergenisse haben,
 * können jetzt die eigentlichen Such- und Ersetzungsmuster gebildet werden.
 * Natürlich auch wieder als Array
 */
foreach($firstWordArr as $firstWord){
   
   $Search[] = '/('.$firstWord.'<DIV><NOTE\s*(.*?)\s*\/DIV>)/i';
   $Replace[] = '<acronym title="'.$StudyNoteArr[$i].'">'.$firstWord.'</acronym>';
   $i++;
}

echo preg_replace($Search, $Replace, $strings);
Jürgen

weiter suchen und suche und such und suc und su und s und .......................[Kopfkratz]..wonach suche ich eigentlich?
juergen&lx
 
Posts: 154
Joined: 18. February 2004 21:36
Location: in einem Dorf am Rande des Strombergs
Operating System: Linux


Return to PHP

Who is online

Users browsing this forum: No registered users and 20 guests