Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Java]Xmltags splitten

Pagina: 1
Acties:

  • DoDo
  • Registratie: Juli 2001
  • Laatst online: 18:49
Hallo, voor een XmlValidator kom ik tegen het probleem aan om de tags te splitten.

Deze moeten gesplit worden op: <hiermagallesstaan>.

Ik heb hierbij deze code bedacht met een RegEx.
Java:
1
2
3
4
5
6
Pattern p = Pattern.compile("<*>");
String s = "<test>Hallo</test>";
for(String si : p.Split(s))
{
       System.out.println(si);
} 


Hier komt het volgende uit:
code:
1
2
<test
Hallo</test


Terwijl het volgende eruit hoort te komen (Volgens mij)
code:
1
2
3
<test>
Hallo
</test>


Ik kan voor deze applicatie helaas geen gebruik maken van de standaard XML validator klasses die al in java zitten.

Ik heb al op google gezocht, maar ik kom nergens uit op de (goede) implementatie van RegEx icm mijn probleem.
De enige oplossing die ik nu voor ogen zie is alle characters 1 voor 1 doorlopen, maar dit is een beetje te omslachtig.
Heeft iemand misschien een tip om dit te kunnen doen?

  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
Ook I aan de HU toevallig? Zo'n xml validator kun je het eenvoudigste stackbased maken denk ik, tenminste zo heb ik hem gemaakt.

Verwijderd

je * refereert naar het symbool wat er voor staat. je regex zoekt dus naar 0 of meer '<' met een > erachter, en vind dus alleen >..
een betere versie is
code:
1
<(.*?)>

die zoekt naar een <, vervolgens een willekeurig karakter 0 of meer keer en een > erachter. de ? is om je regex nongreedy te maken

  • DoDo
  • Registratie: Juli 2001
  • Laatst online: 18:49
Y0ur1 schreef op vrijdag 16 november 2007 @ 21:27:
Ook I aan de HU toevallig? Zo'n xml validator kun je het eenvoudigste stackbased maken denk ik, tenminste zo heb ik hem gemaakt.
Yup ook I aan de HU. (Stack was ik van plan, maar dan moeten wel even de tags gesplit worden).
Kun jij hem niet sturen zodat ik kan kijken hoe jij het hebt gedaan! :P

@kage: Als ik de regex die jij voorstelde erin zet, krijg ik de volgende output
code:
1
<test>Hallo</test>

[ Voor 12% gewijzigd door DoDo op 16-11-2007 21:38 ]


  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 11:20

voodooless

Sound is no voodoo!

Zo lastig is het toch niet..

Je stack alle start tags, en haalt ze weer van de stack af als je de eind tags ziet, die moet dan overeenkomen met de starttag, zoniet dan is ie fout. Er komt natuurlijk nog wat meer bij kijken, maar dat zijn de basics. Voor het parsen kun je beter char voor char lezen, en dan in een statemachine de hele zooi parsen aan een stuk door.

En als je dan toch zo bezig bent, kun je beter een parser generator gebruiken, zoals javacc, antlr of een van de vele anderen.

Kijk ook eens hoe een SAX parser werkt.

* voodooless heeft alweer veel teveel geholpen met een huiswerk opdracht 8)7

[ Voor 14% gewijzigd door voodooless op 16-11-2007 21:51 ]

Do diamonds shine on the dark side of the moon :?


  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
DoDo schreef op vrijdag 16 november 2007 @ 21:36:
[...]


Yup ook I aan de HU. (Stack was ik van plan, maar dan moeten wel even de tags gesplit worden).
Kun jij hem niet sturen zodat ik kan kijken hoe jij het hebt gedaan! :P

@kage: Als ik de regex die jij voorstelde erin zet, krijg ik de volgende output
code:
1
<test>Hallo</test>
Dat moet je toch wel zelf lukken. Ik wil je wel ongeveer zeggen hoe ik het heb gedaan. Ik lees alles in per karakter, ik kijk welk karakter ik heb, als dat een '<' is dan ga ik alles opslaan in een var en als ik een '>' tegenkom dan gooi ik de tag op de stack. Zelfde voor '</'. Dit heb ik in 1 functie gedaan, met een andere functie ga ik kijken of alles goed genest is. In die andere functie gooi ik een open tag op de stack en als er een sluittag is dan moet dat de sluiter zijn van het item wat boven op de stack ligt (peek). That's the basic idea ;)

  • DoDo
  • Registratie: Juli 2001
  • Laatst online: 18:49
@voodooless : Zoals in mijn startpost vermeld staat kan ik die niet gebruiken
@Y0ur1: Daar was ik al mee bezig, maar ik hoopte eigenlijk dat het zo kon. Dit is namelijk veel makkelijker.

  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
DoDo schreef op vrijdag 16 november 2007 @ 21:56:
@voodooless : Zoals in mijn startpost vermeld staat kan ik die niet gebruiken
@Y0ur1: Daar was ik al mee bezig, maar ik hoopte eigenlijk dat het zo kon. Dit is namelijk veel makkelijker.
Het kan op allerlei verschillende manieren, iemand had z'n hele xmlvalidator helemaal met regex's gemaakt, ging mij wat te ver. Stackbased is echt niet zo moeilijk, gewoon even goed nadenken, dat is bij dit soort dingen meer werk dan het programmeren zelf.

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 11:20

voodooless

Sound is no voodoo!

DoDo schreef op vrijdag 16 november 2007 @ 21:56:
@voodooless : Zoals in mijn startpost vermeld staat kan ik die niet gebruiken
Nee, de dingen die ik aangaf zijn geen standaard XML validator dingen. Die dingen helpen je juist om een validator te maken, en niet alleen XML, maar eigenlijk iedere andere "taal" (niet dat ik XML als taal zou willen beschouwen). Dat is echt wezenlijk anders dan een kant en klare XML parser waar je document in gaat en de fouten uitkomen (indien aanwezig). Even onderzoek doen naar die dingen dus! Al is het voor deze toepassing nogal wat overkill, en voordat je de tools doorhebt ben je alweer heel wat uurtjes bezig ;) Dat wil echter niet zeggen dat het niet leerzaam zou zijn.

En verder zei ik dat je naar de SAX parser moest kijken, niet het ding gebruiken ;)

[ Voor 13% gewijzigd door voodooless op 16-11-2007 22:18 ]

Do diamonds shine on the dark side of the moon :?


  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
DoDo schreef op vrijdag 16 november 2007 @ 21:56:
@Y0ur1: Daar was ik al mee bezig, maar ik hoopte eigenlijk dat het zo kon. Dit is namelijk veel makkelijker.
Hey kom op. 't Is huiswerk. Je dacht toch niet dat je jezelf er makkelijk vanaf zou kunnen maken met een 'simpele' RegEx? Recursieve structuren zijn bij mijn weten onmogelijk (never say never - dan wel bijzonder lastig) uit te drukken in regular expressions.

En dan erbij: je zit blijkbaar op de TU. Nadenken zul je :+

  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
MrBucket schreef op vrijdag 16 november 2007 @ 22:08:
[...]

Hey kom op. 't Is huiswerk. Je dacht toch niet dat je jezelf er makkelijk vanaf zou kunnen maken met een 'simpele' RegEx? Recursieve structuren zijn bij mijn weten onmogelijk (never say never - dan wel bijzonder lastig) uit te drukken in regular expressions.

En dan erbij: je zit blijkbaar op de TU. Nadenken zul je :+
lezen zul je :+ HU, hogeschool Utrecht

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Y0ur1 schreef op vrijdag 16 november 2007 @ 22:10:
[...]


lezen zul je :+ HU, hogeschool Utrecht
Ow fuck :o Ik zag HU maar ik las TU.

Maakt verder niet uit, huiswerk = huiswerk. Aan de slag, TS 8)
Pagina: 1