Avatar billede jaffafo Nybegynder
21. oktober 2005 - 00:38 Der er 11 kommentarer og
1 løsning

Skal tjekke om Dataset indeholder en bestemt column eller ej.

Hej

Jeg har et dataset som kan indeholder 1 af 2 forskellige datatable (bliver fyldt af en XML fil).

Jeg har brug for at tjekke om den XML som blev fyldt i datatable indeholder en bestemt column (eller et bestemt element.. det er sådan set ligegyldigt). Min plan er at tjekke om XML'en indeholder nogle spillere. Jeg er ligeglad hvordan jeg løser opgaven, bare en bliver løst :)

Jeg fylder på her:
private function hentdata()
    Dim XMLKlub as String
    XMLKlub = "STI HER" & txtklubid.text
    XMLdata.ReadXML(XMLKlub)
    'response.write(GetRowsByFilter(xmldata, "spiller"))
    If not GetRowsByFilter(xmldata, "klub") = "" Then
        dgklub.visible = true
        dgtest.visible = true
        dgKlub.datasource = XMLData.Tables("klub")
        dgKlub.databind()
           
        dgtest.datasource = XMLData.Tables("spiller")
        dgtest.databind()
           
        If not GetRowsByFilter(xmldata, "spiller") = "" then
            If XMLData.Tables("spiller").rows.count > 0 then
                antalspillere = XMLData.Tables("spiller").rows.count
            end if
        else
            antalspillere = "ingen spillere"
        end if
    end if
end function

Her tjekker jeg Datasettet:

Private function GetRowsByFilter(d as dataset, str as string)
    Dim t As DataTable
    t = d.Tables(str)
   
    Dim cols As DataColumnCollection = t.Columns
   
    try
        Dim inte as integer
        if t.Columns.Count <> 0 then
            for inte = 0 to t.Columns.Count - 1
                response.write(cols(inte).Tostring() & " ")
            next
        else
            response.write("ikke større end 1")
        end if

        If str = "klub" then
            str = "klub_id <> '0'"
        elseif str = "spiller" then
            str = "spiller_id > '0'"
        end if

        Dim foundRows() As DataRow = t.Select(str)

        Dim i As Integer
        For i = 0 to foundRows.GetUpperBound(0)
            return (foundRows(i)(0))
        Next i
    catch ex as exception
        response.write(ex.tostring())
    end try           
End function

Nu har jeg brugt uendelige timer på det og jeg sådan set kørt helt fast.. kommer ikke rigtigt videre med det..  Nogen der har en ide om hvordan jeg løser mit problem?

Her er XML'ene jeg kan få fyldt i mit dataset:

XML1:
<?xml version="1.0" encoding="iso-8859-1" ?>
<doc>
<klub>
  <klub_id>id her</klub_id>
  <klubnavn>navn her</klubnavn>
  <spillere>
  <spiller>
  <spiller_id>spillerid her</spiller_id>
  <navn>spillernavn her</navn>
  </spiller>
  </spillere>
<klub
</doc>

XML2:
<?xml version="1.0" encoding="iso-8859-1" ?>
<doc>
<klub>
  <klub_id>id her</klub_id>
  <klubnavn>navn her</klubnavn>
  <spillere />
</klub>
</doc>



Hvis det blev for rodet så spørg endelig så kan jeg forsøge at forklare det bedre. :) Jeg giver gode points ;)
Avatar billede arne_v Ekspert
21. oktober 2005 - 09:29 #1
XmlDocument & SelectSingleNode !
Avatar billede arne_v Ekspert
21. oktober 2005 - 09:29 #2
<?xml version="1.0" encoding="iso-8859-1" ?>
<doc>
  <klub>
    <klub_id>1</klub_id>
    <klubnavn>X</klubnavn>
    <spillere>
      <spiller>
        <spiller_id>123</spiller_id>
        <navn>xxx</navn>
      </spiller>
    </spillere>
  </klub>
</doc>
Avatar billede arne_v Ekspert
21. oktober 2005 - 09:29 #3
using System;
using System.Xml;

namespace E
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(@"C:\spiller.xml");
            XmlNode xxx = doc.SelectSingleNode("//doc/klub/spillere/spiller[navn='xxx']");
            Console.WriteLine("xxx: " + (xxx!=null));
            XmlNode yyy = doc.SelectSingleNode("//doc/klub/spillere/spiller[navn='yyy']");
            Console.WriteLine("yyy: " + (yyy!=null));
        }
    }
}
Avatar billede jaffafo Nybegynder
24. oktober 2005 - 08:41 #4
Takker det virkede fint nok, men det gør at jeg kalder den XML en gang til da jeg fylder et dataset med XML'en. Er det muligt at lave en funktion hvor jeg smider dataset med?

Lidt ala det her altså?

function test(d as dataset)
  'Kode der tester her..
end function

Og helst i vb.net :) (Pointsene er allerede dine ;)
Avatar billede arne_v Ekspert
24. oktober 2005 - 13:56 #5
i VB.NET ser min første kod eud som:

Imports System
Imports System.Xml

Namespace E
    Class MainClass
        Public Shared Sub Main(ByVal args As String())
            Dim doc As XmlDocument = New XmlDocument
            doc.Load("C:\spiller.xml")
            Dim xxx As XmlNode = doc.SelectSingleNode("//doc/klub/spillere/spiller[navn='xxx']")
            Console.WriteLine("xxx: " + (Not (xxx Is Nothing)))
            Dim yyy As XmlNode = doc.SelectSingleNode("//doc/klub/spillere/spiller[navn='yyy']")
            Console.WriteLine("yyy: " + (Not (yyy Is Nothing)))
        End Sub
    End Class
End Namespace
Avatar billede arne_v Ekspert
24. oktober 2005 - 13:58 #6
Du må kunne loade dit XML fra dit data set som:

            Dim doc As XmlDocument = New XmlDocument
            doc.LoadXML(d.GetXml)
Avatar billede jaffafo Nybegynder
26. oktober 2005 - 09:17 #7
så får jeg denne fejl:

The path is too long after being fully qualified. Make sure path is less than 260 characters :/
Avatar billede arne_v Ekspert
26. oktober 2005 - 11:58 #8
fik du rettet fra .Load til .LoadXML ?
Avatar billede jaffafo Nybegynder
26. oktober 2005 - 14:08 #9
næ.. det gjorde jeg ikke :)

smid du lige et svar :)
Avatar billede arne_v Ekspert
26. oktober 2005 - 14:09 #10
kommer her
Avatar billede arne_v Ekspert
26. oktober 2005 - 14:10 #11
.Load er en String med filnavn

.LoadXML er en String med XML

da begge er String har de ikke kunnet lave operator overload
Avatar billede jaffafo Nybegynder
26. oktober 2005 - 14:11 #12
jeg takker mange gange for svaret :)
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