Webstatt.org - Community seit 2006 - 2012 (2024?)

REGEX: html->xml

Avatar user-180
23.06.2007 11:47

guten tag, liebe freunde der regular expressions! ich brauch euere hilfe...

ich brauche eine xml-datei von diesen daten hier: http://www.destatis.de/jetspeed/portal/cms/Sites/destatis/Internet/DE/Content/Statistiken/Zeitreihen/LangeReihen/Bildung/Content100/lrbil01a,templateId=renderPrint.psml

da das ein ziemlicher aufwand für 6 bis 7 genau gleich aufgebaute tabellen diese in xml zu verwandeln (nd das für jeden im kurs), frage ich mich, ob man das nicht mit regex lösen könnte.
also ich nehme mal an, ich will nur den teil mit den daten behandeln, den ich bereits aus dem quelltext kopiert habe.
also eine tabellenzeile sieht so aus:

<tr>
<td class="Vorspalte" rowspan="1"><span>2005</span></td>
<td><span>1.985.765</span></td>
<td><span>1.037.143</span></td>
<td><span>948.622</span></td>
<td><span>1.737.408</span></td>
<td><span>912.696</span></td>
<td><span>824.712</span></td>
</tr>

wenn es dann in xml ist sollte es so ausschaun:
 
<jahr id="2005">
<insgesamt>1985765</insgesamt>
<maennlich>1037143</maennlich>
<weiblich>948622</weiblich>
</jahr>


(die letzten 3 zellen fallen weg)

geht das?

may the force be with you. but mostly with me.
user-157
23.06.2007 14:24

Wenn ich das richtig verstanden habe, willst du aus
<td><span>1.985.765</span></td>
,
<maennlich>1.985.765</maennlich>
machen?

//e: Welche Sprache?

asdf!
Avatar user-180
23.06.2007 18:41

ich will dass um die erste zahl ein <insgesammt>zahl</insgesamt aus der zweiten ein<maennlich>zahl</maennlich> und aus der dritten ein <weiblich>zahl</weiblich> wird. mit php. und aus der jahreszahl soll ein <jahr id="zahl"> werden

so wie oben beschrieben.

may the force be with you. but mostly with me.
user-157
24.06.2007 06:57

Und wo steckst du dann die anderen Sachen hin? Also die drei Spalten die bei Deutsche stehen. Wie wird das in die XML-Datei gepackt?

asdf!
Avatar user-271
24.06.2007 10:40

Original von user-157
Und wo steckst du dann die anderen Sachen hin? Also die drei Spalten die bei Deutsche stehen. Wie wird das in die XML-Datei gepackt?

naja das erste ist eh nur insgesamt....also maennlich und weiblich zusammen...und die letzten 3 Spalten sind aufgeteilt in nur Deutsche, was anscheinend auch nicht wichtig ist Fettes Grinsen

mh..ich würde es nicht über 1 RegEx machen...sondern über 1 Regex ders ausliest und dann eine xml generiert

so?:
http://moonsword.info/test.php

das wird jetzt generiert mit:
<pre>
<?php
$content = file_get_contents("http://www.destatis.de/jetspeed/portal/cms/Sites/destatis/Internet/DE/Content/Statistiken/Zeitreihen/LangeReihen/Bildung/Content100/lrbil01a,templateId=renderPrint.psml"zwinkern;
preg_match_all('/<td class="Vorspalte".*?<span>(.*?)<.*?<span>(.*?)<.*?<span>(.*?)<.*?<span>(.*?)</is',$content,$match);
#print_r($match);
$buffer = '';
for($i = 0; $i < count($match[0]); $i++) {
$buffer .= "\t<jahr id='{$match[1][$i]}'>\n";
$buffer .= "\t\t<insgesamt>".str_replace('.','',$match[2][$i])."</insgesamt>\n";
$buffer .= "\t\t<maennlich>".str_replace('.','',$match[3][$i])."</maennlich>\n";
$buffer .= "\t\t<weiblich>".str_replace('.','',$match[4][$i])."</weiblich>\n";
$buffer .= "\t</jahr>\n";
}

print htmlentities($buffer);
?>
</pre>

die str_replace sind nur drin um diese punkte zu entfernen zwinkern eigentlich sind sie ja nicht wichtig... Fettes Grinsen das htmlentities um das ganze anzuzeigen...brauchst du eigenlich a uch nicht

#!/bin/bash
traurig){ neutral:& };:
Avatar user-180
24.06.2007 13:10

GEIL, danke schonmal...

kann man das jetzt noch nach jahreszahl andersrum ordnen?

yeah 1337 posts

may the force be with you. but mostly with me.
Avatar user-271
24.06.2007 17:29

jaaa..musste die for schleife umdrehen
for($i = count($match[0])-1; $i >= 0; $i--) {
$buffer .= "\t<jahr id='{$match[1][$i]}'>\n";
$buffer .= "\t\t<insgesamt>".str_replace('.','',$match[2][$i])."</insgesamt>\n";
$buffer .= "\t\t<maennlich>".str_replace('.','',$match[3][$i])."</maennlich>\n";
$buffer .= "\t\t<weiblich>".str_replace('.','',$match[4][$i])."</weiblich>\n";
$buffer .= "\t</jahr>\n";
}

#!/bin/bash
traurig){ neutral:& };: