Entwickler-Ecke
Basistechnologien - [c#] regex problem
vreden123 - Di 09.07.13 14:31
Titel: [c#] regex problem
Hallo ich habe eine Textdatei mit folgendem Inhalt:
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| <folder> <subfolder></subfolder> <folderid>f797b19a-e848-45b9-98e8-a33202b612b8</folderid> <parentfolderid>00000000-0000-0000-0000-000000000000</parentfolderid> </folder> <folder> <subfolder>/Ausbildungsnachweise</subfolder> <folderid>68688162-ea1d-4974-9e4f-6af497d5cc2f</folderid> <parentfolderid>f797b19a-e848-45b9-98e8-a33202b612b8</parentfolderid> </folder> <folder> <subfolder>/Ausbildungsnachweise/April</subfolder> <folderid>6ac972bd-e78e-403a-9bf5-fc6be062144f</folderid> <parentfolderid>68688162-ea1d-4974-9e4f-6af497d5cc2f</parentfolderid> </folder> |
Ich möchte per Schleife jeden "Subfolder" überprüfen.
Ich muss dies irgendwie in mit Regex machen das er mir jedesmal den Inhalt zwischen <folder> und </folder> zurück gibt. Und das ich dann jeden "<subfolder>inhalt</subfolder>" überprüfen kann.
Bei diesem Dateiinhalt würde die "Regex-Schleife" 3mal ausgeführt.
Kann mir vielleicht jemand zeigen wie das geht?
Ich würde es wohl hinbekommen wenn ich nur ein <folder> und </folder> hätte, aber ich weiß nicht wie ich mehrere Folder in eine Schleife bekomme.
Gruß,
Vreden123
Moderiert von
Christian S.: C#- durch XML-Tags ersetzt
vreden123 - Di 09.07.13 16:23
Weil ich was "eigenes" machen wollte :-)
Das muss doch irgendwie mit Regex gehen oder?
jfheins - Di 09.07.13 19:53
"Das muss doch gehen"
Nein. XML ist hinnreichend komplex, dass du es mit regexen nicht vollständig parsen kannst.
Ein bisschen parsen geht natürlich schon, aber das bringt's dann auch nicht so richtig...
Um deine Neugier zu stillen vielleicht noch so viel: Ein regex könnte z.B. so aussehen:
Zitat: |
<folder>\s*(\s+<(\w+)>([^<]*)</\2>\s)+</folder> |
Das Teil matcht dann immer direkt ein folder-Element und in den Gruppen müssten dann die Tags drin stehen. Aber whe jemand kommt auf die Idee, Attribute hinzuzufügen oder so... oder die Formatierung stimmt nicht. Oder ein Leerzeichen an der falschen Stelle. Ein CDATA Block. Ein leeres Tag.
Die ganzen Sachen, die deinen regex zu nichte machen, sollten dir aufzeigen dass es keine gute Idee ist :wink:
Kha - Mi 10.07.13 16:56
jfheins hat folgendes geschrieben : |
Nein. XML ist hinnreichend komplex, dass du es mit regexen nicht vollständig parsen kannst. |
Hm? .NET-Regexe können kontextfreie Sprachen erkennen, und das ist XML doch hoffentlich... ;) .
vreden123 hat folgendes geschrieben : |
Weil ich was "eigenes" machen wollte :-) |
Wenn du das wirklich möchtest, wäre ein eigener Parser (z.B. durch Rekursiven Abstieg) wahrscheinlich lehrreicher als eine Regex-Bastellösung :) .
jfheins - Mi 10.07.13 22:15
Kha hat folgendes geschrieben : |
Hm? .NET-Regexe können kontextfreie Sprachen erkennen, und das ist XML doch hoffentlich... ;) . |
Ach? :oops:
Als präventive Verteidigung darf ich voraus schicken, dass ich nicht Informatik studiere. Allerdings habe ich das eine oder andere interessiert aufgeschnappt ^^
Und da hieß es, dass HTML (bzw. XML) eben keine reguläre (sondern eine kontextfreie) Sprache ist... und ich bin jetzt mal davon ausgegangen, dass reguläre Ausdrücke nur reguläre Sprachen erfassen könne. (Und bin damit wohl
nicht allein [
http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html]) Da du explizit .NET-Regexe ansprichst, dürfte das auch auf die allermeisten Regex-Engines zutreffen ...? Ich habe jetzt auf die schnelle auch keine Belege dafür gefunden, dass das eine oder andere stimmt.
Und selbst wenn .NET Regexe kontextfreie Sprachen erkennen können, wird das sicher weder schön noch schnell oder einfach sein XML korrekt zu parsen.
vreden123 - Mi 10.07.13 23:26
OK, dann werde ich doch nox eigenes Machen und eine XML-Klasse verwenden.
Aber welche kann ich am besten nehmen?
Also ich möchte z.B folgendes zu in einer bestehenden xml-Datei hinzufügen und nicht die ganze xml-Datei überschreiben, wie es momentan passiert :-)
Xml-Inhalt:
XML-Daten
1: 2: 3: 4: 5:
| <folder> <subfolder>/Ausbildungsnachweise/April/bla</subfolder> <folderid>ssc972bd-e78e-403a-9bf5-fc6be062144f</folderid> <parentfolderid>dd688162-ea1d-4974-9e4f-6af497d5cc2f</parentfolderid> </folder> |
Mit welcher klasse kann ich das am besten zu einer xml-Datei hinzufügen?
Moderiert von
Christian S.: Code- durch XML-Tags ersetzt
Th69 - Do 11.07.13 09:00
Hallo vreden123,
wenn du wirklich eine reguläre XML-Datei hast, dann kann man nicht einfach unten Daten an die Datei dranhängen, denn der genormte Aufbau ist folgendermaßen:
XML-Daten
1: 2: 3: 4:
| <?xml version="1.0" encoding="UTF-8"?> <RootTag> ... </RootTag> |
Es darf nur
genau 1 RootTag geben (aber egal welchen Namen dieser Tag hat).
Und Daten (Zeilen) zu einer Datei an beliebiger Stelle hinzufügen, ist vom Dateisystem nicht vorgesehen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!