Vraag & Antwoord

Programmeren

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

15 antwoorden
  • 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.
  • Hoe is de rest gecodeerd? In theorie kan .Net met dit soort informatie heel makkelijk omgaan. Dus iedere .Net, waaronder C#, zou je kunnen gebruiken.
  • 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
  • Het probleem is ook dat het aantal tags <> kan varieren en andere info hebben. Ik bedoel daarmee, er kunnen mij nu nog onbekende tags bijkomen. Soms kom ik er achter dat in record 16.369 (ik noem maar een getal) er een compleet nieuwe tag bij gekomen is.
  • 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?
  • [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 :-)
  • 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 :-)
  • 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.
  • 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...
  • 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.
  • 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.
  • Ik neem aan dat het dus gelukt is met dat stuk waar we het eerder over hadden. Dat je data inconsistent is komt wel vaker voor. Dat hoeft niet perse een probleem te zijn toch? Ik weet niet wat je wilt bereiken?
  • 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.
  • 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.
  • Mooi dat het gelukt is. Ik ben zelf nooit zo'n fan van datasets/datatables, maar het belangrijkste is dat het het uiteindelijk doet wat je wilt ;) Graag gedaan.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.