Avatar billede ha9953 Nybegynder
17. juli 2004 - 16:02 Der er 27 kommentarer og
1 løsning

Problemer med søgningen i et dataset baseret på en xml-fil

Når jeg laver en søgning i et dataset, der er baseret på en xml fil, hvor jeg ved at søgeresultatet skal give en række, giver den alligevel ingen rækker. Nogen der kan hjælpe mig?


Min xmlfil ser ud som følgende:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<BrugerGruppeRolle>
  <Roller>
      <brugerid>1</brugerid>
      <gruppeid>2</gruppeid>
      <brugerrolleid>2</brugerrolleid>
  </Roller>
  <Roller>
      <brugerid>1</brugerid>
      <gruppeid>2</gruppeid>
      <brugerrolleid>11</brugerrolleid>
  </Roller>
  <Roller>
      <brugerid>1</brugerid>
      <gruppeid>3</gruppeid>
      <brugerrolleid>2</brugerrolleid>
  </Roller>
</BrugerGruppeRolle>

Jeg søger på denne måde:

Dim Rolleset2 as new DataSet()
Dim Rolletabel2 As DataTable
Dim Rollerows2 As DataRow()
Rolleset2.ReadXml(filnavn2)
Rolletabel2 = Rolleset2.Tables(0)
Dim strexpr as string = "gruppeid=3 AND brugerrolleid=2”
Rollerows2 = Rolletabel2.Select(strexpr)

if Rollerows2.length>0 then
response.write(“der læses”)
end if
Avatar billede snepnet Nybegynder
17. juli 2004 - 16:11 #1
Hej ha9953

Hvis jeg læser din xml-fil ind i et dataset har jeg 3 rækker i første tabel i datasættet, så det skulle funge fint. Er du sikker på at værdien af filnavn2 er ok ?
Avatar billede snepnet Nybegynder
17. juli 2004 - 16:12 #2
Undskyld - misforstod dig lige. Øjeblik.
Avatar billede snepnet Nybegynder
17. juli 2004 - 16:19 #3
DataSet ds = new DataSet();

ds.ReadXml(@"C:\TestFiles\testxml.xml"); // din fil
DataRow[] drs = ds.Tables[0].Select("gruppeid=3 AND brugerrolleid=2");

Ovenstående medfører at drs.Length = 1.

Det ser ud til at være helt ok.... Er du 100 på at Rolleset2 er som forventet inden du laver din select ?
Avatar billede ha9953 Nybegynder
17. juli 2004 - 16:26 #4
100% sikker - har skrevet den ud i et datgrid for at se
Avatar billede snepnet Nybegynder
17. juli 2004 - 16:38 #5
Det virker lidt sort... Nu har jeg lige prøvet at lave denne i VB :

        Dim ds As New DataSet
        Dim selectedRows As DataRow()

        ds.ReadXml("C:\TestFiles\testxml.xml")

        Dim strexpr As String = "gruppeid=3 AND brugerrolleid=2"

        selectedRows = ds.Tables(0).Select(strexpr)

Det virker også helt som forventet.
Avatar billede snepnet Nybegynder
17. juli 2004 - 16:41 #6
Og hvis jeg kopierer din kode direkte fungerer det også som ventet ... ?!?
Avatar billede snepnet Nybegynder
17. juli 2004 - 16:43 #7
Har du konstateret med debuggeren at Rollerows2.length er 0 ?
Avatar billede ha9953 Nybegynder
17. juli 2004 - 17:11 #8
jeps - kan det have noget at sige at funktionen er kompilet? - Hele funktionen ser ud som følgende:

        Public function kontrol_BrugerGruppeRolle(brugeren as string,gruppen as string, rollen as string) as boolean
            strexpr = ""
            if brugeren="" or gruppen="" or rollen="" then
                return false               
                exit function
            end if

            strexpr= "gruppeid=" & gruppen & " AND brugerrolleid=" & rollen
            tester = brugeren & gruppen & rollen
            dim filnavn2 as string = ConfigurationSettings.AppSettings("server") & ConfigurationSettings.AppSettings("write") & "bruger\"  & brugeren & ".xml"
            dim filInfo2 as new fileinfo(filnavn2)
            if filinfo2.exists() then
                Dim Rolleset2 as new DataSet()
                Dim Rolletabel2 As DataTable
                Dim Rollerows2 As DataRow()                           
                Rolleset2.ReadXml(filnavn2)
                Rolletabel2 = Rolleset2.Tables(0)
           
                Rollerows2 = Rolletabel2.Select(strexpr)   
                if Rollerows2.length>0 then
                    return true
                end if
                exit function                       
            else
                strexpr = ""
                return false               
                exit function           
            end if
        end function
Avatar billede snepnet Nybegynder
17. juli 2004 - 17:17 #9
Hvad sker der hvis du skriver din select ind direkte istedet for strexpr ?
Avatar billede ha9953 Nybegynder
17. juli 2004 - 17:20 #10
det samme
Avatar billede ha9953 Nybegynder
17. juli 2004 - 17:23 #11
Nedenstående giver først 10 og derefter 0 - så der er alstå indhold i dataset fra starten

            dim strexpr as string
            strexpr= "gruppeid=2 AND brugerrolleid=2"
            dim filnavn2 as string = ConfigurationSettings.AppSettings("server") & ConfigurationSettings.AppSettings("write") & "bruger\"  & "1" & ".xml"
            dim filInfo2 as new fileinfo(filnavn2)
            if filinfo2.exists() then
                Dim Rolleset2 as new DataSet()
                Dim Rolletabel2 As DataTable
                Dim Rollerows2 As DataRow()                           
                Rolleset2.ReadXml(filnavn2)
                Rolletabel2 = Rolleset2.Tables(0)

                Rollerows2 = Rolletabel2.Select()   
                response.write(rollerows2.length & "<br/>")
                               
                Rollerows2 = Rolletabel2.Select( "gruppeid=2 AND brugerrolleid=2")   
                response.write(rollerows2.length & "<br/>")
            end if
Avatar billede snepnet Nybegynder
17. juli 2004 - 17:23 #12
LOLZ -  det er da lidt vildt :o)

Hvad sker der hvis du bare kopiere denne kode direkte ind :

        Dim ds As New DataSet
        Dim selectedRows As DataRow()

        ds.ReadXml("C:\TestFiles\testxml.xml")

        Dim strexpr As String = "gruppeid=3 AND brugerrolleid=2"

        selectedRows = ds.Tables(0).Select(strexpr)

Eller i hvert fald næsten direkte... Du skal nok lige skrive din egen filsti ind :o)
Avatar billede ha9953 Nybegynder
17. juli 2004 - 17:27 #13
fuldstændigt det samme
Avatar billede snepnet Nybegynder
17. juli 2004 - 17:32 #14
For vildt... Det fungerer upåklageligt her ?!?
(Har du prøvet at udskrive den xml-fil du reelt indlæser også ?)
Avatar billede ha9953 Nybegynder
17. juli 2004 - 17:34 #15
jeps - har desuden prøvet kun at søge på f.eks gruppeid dvs. "gruppeid=2" - og her læser den godt nok
Avatar billede ha9953 Nybegynder
17. juli 2004 - 17:35 #16
har også prøve kun at søge på brugerrolleid og her læser dne ikke?
Avatar billede ha9953 Nybegynder
17. juli 2004 - 17:41 #17
vent 2 sekunder - nu virker det vist lige pludselig ... - satsme mystisk
Avatar billede snepnet Nybegynder
17. juli 2004 - 17:43 #18
Synes egentlig at det er mere mystisk at det ikke har virket :o)
Avatar billede ha9953 Nybegynder
17. juli 2004 - 18:10 #19
virkede ikke alligevel - har fundet frem til noget dybt mærkeligt: hvis brugerrolleid er mindre end gruppeid så virker det fint, men hvis brugerroleid er større end gruppeid så virker det ikke !!! ????
Avatar billede ha9953 Nybegynder
17. juli 2004 - 18:15 #20
hmmm - noop sikke noget sludder - den søger kun i hver anden post? - der er der fejlen er.... hvordan fann ordner jeg det - du få sgu nogle xtra point hvis du løser dette :-)
Avatar billede snepnet Nybegynder
17. juli 2004 - 18:23 #21
Prøv sådan en her :o)

gruppeid='2' AND brugerrolleid='11'

Mon ikke et par plinger om tallene hjælper lidt på sagerne ?
Avatar billede ha9953 Nybegynder
17. juli 2004 - 18:37 #22
he he - virker heller ikke - men kig her: www.edtwodth.dk/test.aspx - 2 xml filer bygget op på den samme måde. Den ene giver det rigtige søgeresultat - den anden tæler forkert?
Avatar billede ha9953 Nybegynder
17. juli 2004 - 18:39 #23
så var der der - klammer om det hele ser ud til at virke
Avatar billede ha9953 Nybegynder
17. juli 2004 - 18:50 #24
smid lige et svar
Avatar billede snepnet Nybegynder
17. juli 2004 - 18:52 #25
Både klammer og plinger virker her, men et lidt større testgrundlag ville nok være en god idé :o)
Avatar billede snepnet Nybegynder
17. juli 2004 - 18:54 #26
Jeg synes egentlig ikke jeg kan se noget forkert på den side du sendte link til... Overser jeg noget ?
Avatar billede ha9953 Nybegynder
17. juli 2004 - 18:57 #27
jeg fik rettet det på testsiden - derfor virker det - tak for hjælpen - hold kæft - bruge en hel lørdag på det :-(
Avatar billede snepnet Nybegynder
17. juli 2004 - 19:00 #28
Ja - det er ikke så godt givet ud :o(
(men bedre end en hel week-end :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester