Ga naar inhoud

kenteken(s) opvragen (C#) uit een string (onbepaalde lengte)


Aanbevolen berichten

Hoi, ik zit met een vraag over het uitelkaar halen van een string. Wat is het geval. ik krijg via een webservice gegevens binnen over een persoon en de kentekens die de persoon op zijn naam heeft of had. Dat is een lange reeks van gegevens waar 0, 1 of meerdere kentekens in voor kunnen komen. De kenteken staan tussen de volgende tekst: <KENTEKEN>11AABB</KENTEKEN> Ik moet al die kentekens kunnen onderscheppen en vervolgs weer opzoeken wie bij die kentekens hoort. Dus, ik neem aan dat ik eerst moet weten hoeveel kentekens er zijn en vervolgens die kentekens ertussen uit halen. Hoe doe ik dat (C#). Als iemad het mij kan uitleggen in een andere taal dan ook graag.
Link naar reactie
De rest staat ook allemaal tussen tags. Het is eigenlijk een xml-bestand, maar komt binnen als een string. Normaal lees ik een xml-bestand op een bepaalde manier uit maar dat gaat hier niet op lijkt het. Ik kan niet de "decendants" opvragen etc. <?xml version="1.0" ?> - <AANS-PERS-PER> - <ALG-GEG> <GEBR-IDENT>00200221</GEBR-IDENT> <PROC-IDENT>1738</PROC-IDENT> <PROC-FUNC>2</PROC-FUNC> <OPT-STAT-TEKST>1</OPT-STAT-TEKST> </ALG-GEG> - <AANSPR-PERS-GEG> - <NAT-PERS-GEG> <NAT-PERS-SL>xxxxxxx</NAT-PERS-SL> <GESL-NAAM-NAT-P>Corbier</GESL-NAAM-NAT-P> <VOOR-LET-NAT-P>W</VOOR-LET-NAT-P> <GEB-DAT-NAT-P>19591106</GEB-DAT-NAT-P> </NAT-PERS-GEG> </AANSPR-PERS-GEG> - <PEIL-PER-GEG> <B-DAT-PEIL-PER>0</B-DAT-PEIL-PER> </PEIL-PER-GEG> - <ADRES-PER-GEG> <STRAAT-PER>Gele lis</STRAAT-PER> <HUIS-NR-PER>13</HUIS-NR-PER> <POSTC-N-PER>8607</POSTC-N-PER> <POSTC-A-PER>HA</POSTC-A-PER> <WOONPL-PER>Sneek</WOONPL-PER> </ADRES-PER-GEG> <VRTG-AANS-TAB /> </AANS-PERS-PER> BTW, ik maak dit zo zichtbaar in Visual Studio. Wil ik dit inlezen in een XDocument feedXML = XDocument.Load(a); dan krijg ik de melding dat er illegale characters in staan
Link naar reactie
Ik zou dat zo aanpakken: [code:1:d40e6a6d31] xml = new XmlDocument(); xml.LoadXml(xmlstring); //als er illegale karakters in je xml string.. replace deze.. var nodes = xml.SelectNodes("/parentnode1/parentnode2/kentekennode"); [/code:1:d40e6a6d31] Je zegt er kunnen variabele nodes tussen zitten, bedoel je ook wat betrefd in de parent child structuur?
Link naar reactie
[quote:be03ea1330="blackhawkdesign"] Je zegt er kunnen variabele nodes tussen zitten, bedoel je ook wat betrefd in de parent child structuur?[/quote:be03ea1330] Yep, dat bedoel ik precies. En helemaal vreemd is. neem dit gedeelte: <?xml version="1.0" ?> - <AANS-PERS-PER> - <ALG-GEG> <GEBR-IDENT>00200221</GEBR-IDENT> <PROC-IDENT>1738</PROC-IDENT> <PROC-FUNC>2</PROC-FUNC> <OPT-STAT-TEKST>1</OPT-STAT-TEKST> </ALG-GEG> - <AANSPR-PERS-GEG> - <NAT-PERS-GEG> <NAT-PERS-SL> Die sloop ik eruit om dat daarna een sleutel komt van 16 posities. Dat gaat een dag goed en dan is ineens dit gedeelte veel langer of korter zodat ik een onjuist sleutel krijg. Ik dacht dat webservices zo betrouwbaar waren :-)
Link naar reactie
Misschien ook wel handig om er nog even bij te vertellen. De webservice biedt met die string ook een soort van tabellen aan. Die lees ik in, in een dataset die ik daarna aan een datatable koppel. Dan kan ik mooi door de gegevens heen loopen. Een nadeel - uiteraard, het zal eens niet zo zijn - er staat lang niet zoveel info in als in de string. Zo kan iemand meerdere autokentekens op zijn naam hebben maar de datatable geeft er maar 1, wat ik ook doe. Heel vreemd allemaal. Hadden die mensen van oData gehoord dan werd het leven een stuk gemakkelijker :-)
Link naar reactie
oke ik begrijp je dus helemaal niet meer :p Even terugkomen op die xml string, 1 ding tegelijk: Je zegt, ja het beinvloed die parent child structuur, wat mij vreemd lijkt aangezien de kentekens dus de ene keer onder node a vallen en de andere keer onder node b. Dus: [code:1:c9fcd46471] <rootnode> <persoon> <persoonsgegevens> <naam>Henk</naam> </persoonsgegevens> <auto> <kenteken>xxx</kenteken> <kenteken>xxxx</kenteken> </auto> </persoon> </rootnode> kan bij een ander geval dus zo uit zien. De parents (dus alle parents) zijn niet meer hetzelfde als eerst. Eerst was dat rootnode,persoon en auto. Nu is het geworden: rootnode,persoon,persoonsgegevens,auto. <rootnode> <persoon> <persoonsgegevens> <naam>Henk</naam> <auto> <kenteken>xxx</kenteken> <kenteken>xxxx</kenteken> </auto> </persoonsgegevens> </persoon> </rootnode> [/code:1:c9fcd46471] Of bedoel je nee, het gaat om de nodes erom heen, dus zo: [code:1:c9fcd46471] <rootnode> <persoon> <persoonsgegevens> <naam>Henk</naam> </persoonsgegevens> <auto> <kenteken>xxx</kenteken> <kenteken>xxxx</kenteken> </auto> </persoon> </rootnode> en de volgende keer is dat dan: <rootnode> <persoon> <persoonsgegevens> <naam>Henk</naam> </persoonsgegevens> <familiegegevens> <achternaam>klaasen</achternaam> <familiegegevens> <auto> <kenteken>xxx</kenteken> <kenteken>xxxx</kenteken> </auto> </persoon> </rootnode> [/code:1:c9fcd46471] Het kan heel goed zijn dat de xml string de ene keer uitgebreider is dan de andere keer. Kan je anders 2 voorbeelden geven van complete xml strings?(dus dat er meer of minder info in zit)? Gooi dan wel de overbodige handel eruit, maar in je voorbeelden die je nu geeft zie ik ook nergens het kenteken node staan.. dat maakt het wat onduidelijk. De reden dat ik dit expliciet vraag is omdat het me heel vaag lijkt dat dit het geval is, dan klopt namelijk het hele xml schema niet van die web service.
Link naar reactie
Het kan varieren van: <?xml version="1.0" ?> - <AANS-PERS-PER> - <ALG-GEG> <GEBR-IDENT>00200221</GEBR-IDENT> <PROC-IDENT>1738</PROC-IDENT> <PROC-FUNC>2</PROC-FUNC> <OPT-STAT-TEKST>1</OPT-STAT-TEKST> </ALG-GEG> - <AANSPR-PERS-GEG> - <NAT-PERS-GEG> <NAT-PERS-SL>XXXXXX</NAT-PERS-SL> <GESL-NAAM-NAT-P>XXXXX</GESL-NAAM-NAT-P> <VOOR-LET-NAT-P>X</VOOR-LET-NAT-P> <GEB-DAT-NAT-P>XXXXXXXX</GEB-DAT-NAT-P> </NAT-PERS-GEG> </AANSPR-PERS-GEG> - <PEIL-PER-GEG> <B-DAT-PEIL-PER>0</B-DAT-PEIL-PER> </PEIL-PER-GEG> - <ADRES-PER-GEG> <STRAAT-PER>XXXXXX</STRAAT-PER> <HUIS-NR-PER>XX</HUIS-NR-PER> <POSTC-N-PER>1111</POSTC-N-PER> <POSTC-A-PER>AA</POSTC-A-PER> <WOONPL-PER>XXXXXX</WOONPL-PER> </ADRES-PER-GEG> <VRTG-AANS-TAB /> </AANS-PERS-PER> tot bijvoorbeeld: <?xml version="1.0" ?> - <AANS-PERS-PER> - <ALG-GEG> <GEBR-IDENT>00200221</GEBR-IDENT> <PROC-IDENT>1738</PROC-IDENT> <PROC-FUNC>2</PROC-FUNC> <OPT-STAT-TEKST>1</OPT-STAT-TEKST> </ALG-GEG> - <AANSPR-PERS-GEG> - <NAT-PERS-GEG> <NAT-PERS-SL>xxxxx</NAT-PERS-SL> <GESL-NAAM-NAT-P>xxxxxx</GESL-NAAM-NAT-P> <VOOR-LET-NAT-P>LV</VOOR-LET-NAT-P> <GEB-DAT-NAT-P>xxxxx</GEB-DAT-NAT-P> </NAT-PERS-GEG> </AANSPR-PERS-GEG> - <PEIL-PER-GEG> <B-DAT-PEIL-PER>0</B-DAT-PEIL-PER> </PEIL-PER-GEG> - <ADRES-PER-GEG> <STRAAT-PER>xxxxx</STRAAT-PER> <HUIS-NR-PER>XX</HUIS-NR-PER> <HUIS-TV-PER>XX</HUIS-TV-PER> <POSTC-N-PER>XXX</POSTC-N-PER> <POSTC-A-PER>XX</POSTC-A-PER> <WOONPL-PER>XXXXX</WOONPL-PER> </ADRES-PER-GEG> - <VRTG-AANS-TAB> - <VRTG-AANS-GEG> - <KENT-GEG> <KENTEKEN>AA1111</KENTEKEN> </KENT-GEG> - <STAT-VRTG-GEG> <STATUS-VRTG>52</STATUS-VRTG> <STAT-VRTG-TEKST>voertuig ge-exporteerd</STAT-VRTG-TEKST> <STAT-VRTG-B-DAT>25-3-2011</STAT-VRTG-B-DAT> </STAT-VRTG-GEG> - <AANSPR-GEG> <REG-DAT-AANSPR>25-3-2011</REG-DAT-AANSPR> </AANSPR-GEG> </VRTG-AANS-GEG> - <VRTG-AANS-GEG> - <KENT-GEG> <KENTEKEN>AA1111</KENTEKEN> </KENT-GEG> - <STAT-VRTG-GEG> <STATUS-VRTG>52</STATUS-VRTG> <STAT-VRTG-TEKST>voertuig ge-exporteerd</STAT-VRTG-TEKST> <STAT-VRTG-B-DAT>25-3-2011</STAT-VRTG-B-DAT> </STAT-VRTG-GEG> - <AANSPR-GEG> <REG-DAT-AANSPR>25-3-2011</REG-DAT-AANSPR> </AANSPR-GEG> </VRTG-AANS-GEG> - <VRTG-AANS-GEG> - <KENT-GEG> <KENTEKEN>AA1111</KENTEKEN> </KENT-GEG> - <STAT-VRTG-GEG> <STATUS-VRTG>52</STATUS-VRTG> <STAT-VRTG-TEKST>voertuig ge-exporteerd</STAT-VRTG-TEKST> <STAT-VRTG-B-DAT>20050418</STAT-VRTG-B-DAT> </STAT-VRTG-GEG> - <AANSPR-GEG> <REG-DAT-AANSPR>20050412</REG-DAT-AANSPR> </AANSPR-GEG> </VRTG-AANS-GEG> </VRTG-AANS-TAB> </AANS-PERS-PER> En dan weet ik nog niet of er nog meer nodes kunnen/zullen zijn... Ik heb de gegevens gecesureerd maar dat snap je...
Link naar reactie
Aha zo bedoel je duidelijk. Maarrr dan geldt wel dat ALS in de xml een kenteken node voorkomt, dan valt hij onder de node <KENT-GEG> en deze heeft ook weer een vaste parent.. etc. Dus een versimpelde structuur ziet er dan zo uit: [code:1:3aca0924f5] <?xml version="1.0" ?> <AANS-PERS-PER> [..allemaal nodes ..] <VRTG-AANS-TAB> <VRTG-AANS-GEG> <KENT-GEG> <KENTEKEN>AA1111</KENTEKEN> </KENT-GEG> </VRTG-AANS-TAB> </VRTG-AANS-GEG> </AANS-PERS-PER> [/code:1:3aca0924f5] Dus dan kun je dat stukje code gebruiken wat ik voorstelde, concreet ziet het er dan zo uit: [code:1:3aca0924f5] xml = new XmlDocument(); xml.LoadXml(xmlstring); //als er illegale karakters in je xml string.. replace deze.. var nodes = xml.SelectNodes("/AANS-PERS-PER/VRTG-AANS-TAB/VRTG-AANS-GEG/KENT-GEG/KENTEKEN"); [/code:1:3aca0924f5] Vervolges kijk je dan of je nodes variable geen null is en meerdere nodes bevat en dan kan je daaruit je kentekens halen.
Link naar reactie
Ben inmiddels een stapje verder. Nu is het probleem het volgende: (en ik verwacht van niemand een oplossing hoor :-) ) Per string verschijnt er een XML-document. Die kan afhankelijk van een sleutel van "iemand" verschillen. Gevolg is dat er geen pijl op te trekken is. Ik heb het even opgegeven. Ga vanavond nog eens proberen.
Link naar reactie
Wat ik doe is het volgende: Aan de hand van burgerservicenummers (BSN) haal ik RDW-sleutels op. Met die RDW-sleutels haal ik NAW-gegevens op en kentekens. En vervolgens weer aan de hand van die kentekens, voertuiggegevens. Maar als ik het een BSN invoer komt ie met een drietal tabellen. Echter, een ander nummer kan weer 3 andere tabellen opleveren. Tja, zo kan ik weinig. Ben overigens al een heel eind. De eerste stap is dus het ophalen van een RDW-sleutel. Nu kan het zijn dat het RDW helemaal geen sleutel heeft voor een bepaald persoon omdat ie geen auto heeft bijvoorbeeld. Maar iemand kan ook wel voorkomen met een sleutel maar geen auto hebben. en dan iemand die natuurlijk wel 1 of meer kentekens op zijn/haar naam heeft staan. En zo gaat het maar door. Ik moet zo'n 47.000 BSN-nummers invoeren en wie weet wat er gebeurt met een nummer die als - ik noem maar wat - als 16.738-ste aan de beurt is. Wie weet wat voor tabellen ik dan krijg als er weer een andere situatie zich voordoet die ik nog niet ken. Het probleem is dat ik geen handleiding o.i.d. heb om vast te kunnen stellen welke situaties zich allemaal kunnen voordoen.
Link naar reactie
Hmm, ik ben er al uit. Ik kan gewoon een dataset aanmaken en de string eraan hangen. Dan zijn meteen alle problemen opgelost. Voorbeeld: DataSet ds = new DataSet; ds.ReadXml(bestandsnaam); GridView1.DataSource = ds; Databind(); Overigens pak ik het nog anders aan maar dat is verder niet belangrijk. blackhawkdesign, jij bedankt voor het meedenken.
Link naar reactie
Nog even uitleggen? Als ik de string iedere keer per stuk binnenhaal en aan een dataset hang dan hangt het er helemaal van af hoe "ze" er per stuk uit zien. Laat ik allerlei strings in de dataset komen dan maakt de dataset een uitgebreider object. voorbeeld: string 1 bevat "Voornaam" en "Achternaam" Dan krijg je die 2 alleen "Wiep", "Corbier" (2 kolommen) Volgende string kan zijn "Henk", "de", "Vries", dan krijg je een dataset met 3 "kolommen" Voornaam, Tussenvoegsel en Achternaam. Laad je beide strings dan krijg je: "Wiep", " ", "Corbier" (3 kolommen) "Henk", "de", "Vries".( 3 kolommen) Zo moet het dan maar...
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...