Avatar billede slash_underscore Nybegynder
04. maj 2005 - 20:46 Der er 32 kommentarer og
1 løsning

Hvordan søger jeg i en XML-fil

Hej,

Jeg har nu lavet en applikation, hvor en xml-fil indlæses i et datagrid, men hvordan søger man i xml-filen, før den indlæses?

Et eksempel kunne være en database med varer:

varenr, beskrivelse, antal, pris

Hvordan laver jeg det sådan at man f.eks. kan indtaste et varenr, hvorefter denne vare indlæses?
Avatar billede arne_v Ekspert
04. maj 2005 - 20:50 #1
Brug XmlDocument SelectSIngleNode eller SelectNodes og et XPath udtryk
Avatar billede arne_v Ekspert
04. maj 2005 - 20:51 #2
http://www.eksperten.dk/artikler/499 har et eksempel på SelectNodes
Avatar billede slash_underscore Nybegynder
04. maj 2005 - 20:51 #3
Undskyld, men jeg er ikke så meget inde i VB.NET (bruger normalt Gambas)

Kan du forklare det lidt nærmere?
Avatar billede arne_v Ekspert
04. maj 2005 - 20:56 #4
artiklen er nok et godt sted at starte
Avatar billede arne_v Ekspert
04. maj 2005 - 20:57 #5
ellers må du poste et lille stykke XML som jeg kan lave lidt demo kode til
Avatar billede slash_underscore Nybegynder
04. maj 2005 - 21:07 #6
Jeg bruger denne kode i VB:

==============

XMLDataset = New DataSet ' Vi sætter et Dataset
            XMLDataset.ReadXml("XMLData.xml") ' Vi henter vores data fra XMLData.xml
            DataGrid_oversigt.DataSource = XMLDataset ' Vi henter de hentede data ind i vores datagrid
            DataGrid_oversigt.DataMember = "vare" ' Vi sætter vores medlemsskaber til "vare"

==============

XMLData.xml indeholder:

<?xml version="1.0" standalone="yes"?>
<root>
  <vare>
    <Varenr>BN100541</Varenr>
    <Beskrivelse>Lommelygte</Beskrivelse>
    <Antal>199</Antal>
    <Kategori>Elektronik</Kategori>
    <Indkoebspris>12</Indkoebspris>
    <Udsalgspris>49</Udsalgspris>
  </vare>
  <vare>
    <Varenr>BN203654</Varenr>
    <Beskrivelse>Pulsur</Beskrivelse>
    <Antal>23</Antal>
    <Kategori>Elektronik</Kategori>
    <Indkoebspris>76</Indkoebspris>
    <Udsalgspris>299</Udsalgspris>
  </vare>
  <vare>
    <Varenr>BN234694</Varenr>
    <Beskrivelse>Vincent CD-S3</Beskrivelse>
    <Antal>2</Antal>
    <Kategori>Elektronik</Kategori>
    <Indkoebspris>2049</Indkoebspris>
    <Udsalgspris>5999</Udsalgspris>
  </vare>
  <vare>
    <Varenr>BN234821</Varenr>
    <Beskrivelse>Vaskemaskine</Beskrivelse>
    <Antal>1</Antal>
    <Kategori>Hårde Hvidevarer</Kategori>
    <Indkoebspris>799</Indkoebspris>
  </vare>
</root>
Avatar billede arne_v Ekspert
04. maj 2005 - 21:11 #7
Så har du ikke et XmlDOcument men et DataSet.

Det skal du søge i på præcis samme måde som hvis det DataSet var loadet
fra en database
Avatar billede slash_underscore Nybegynder
04. maj 2005 - 21:19 #8
Hvordan gøres det?
Avatar billede arne_v Ekspert
04. maj 2005 - 21:38 #9
worst case kan du vel altid loope gennem DataTable's, DataRow's og DataColumn's
Avatar billede slash_underscore Nybegynder
04. maj 2005 - 21:42 #10
Kan du give et eksempel på det?
Avatar billede arne_v Ekspert
04. maj 2005 - 21:45 #11
Jo.

Men jeg tror at det er meget nemmere at hive XML teksten ud af dit DataSet,
loade det i et XmlDocument og bruge XPath på det
Avatar billede slash_underscore Nybegynder
04. maj 2005 - 21:50 #12
Skal jeg så helt gå væk fra DataSet's og istedet bruge XmlDocument?
Avatar billede slash_underscore Nybegynder
04. maj 2005 - 21:51 #13
...jeg mener, det er vel i bund og grund det nemmeste? - istedet for at vælte rundt i begge dele...?
Avatar billede arne_v Ekspert
04. maj 2005 - 21:53 #14
Hvis ikke du har noget at bruge DataSet til så kan du lige så godt kun loade
ind i et XmlDocument.

Men du kan som sagt nemt konvertere mellem de to.
Avatar billede slash_underscore Nybegynder
04. maj 2005 - 21:55 #15
Jeg får denne fejl: (Når jeg Dim'er XmlDocument)

d:\dokumenter\Visual Studio Projects\WindowsApplication1\Lagerstyring.vb(554): Type 'XmlDocument' is not defined.
Avatar billede slash_underscore Nybegynder
04. maj 2005 - 21:55 #16
Jeg kan nemt indlæse data fra XmlDocument ind i et Datagrid?
Avatar billede arne_v Ekspert
04. maj 2005 - 21:56 #17
du skal importere System.Xml namespace
Avatar billede arne_v Ekspert
04. maj 2005 - 21:58 #18
Du kan ihvertfald lave XmlDocument->DataSet->DataGrid
Avatar billede slash_underscore Nybegynder
04. maj 2005 - 21:58 #19
Project -> Add Reference -> .NET -> System.Xml.dll ???

Det virker ikke... (og jeg har sikkert ikke gjort det rigtigt...)
Avatar billede arne_v Ekspert
04. maj 2005 - 22:00 #20
Jo men du skal også have en

Imports System.Xml

i toppen af dit program
Avatar billede slash_underscore Nybegynder
04. maj 2005 - 22:05 #21
Oki, så langt så godt :)

Jeg har nu dette:

Var.Load("var.xml") ' Vi henter vores data fra var.xml

Hvad skal jeg gøre for at pipe indholdet af XmlDocument over i et dataset? (og er det her jeg skal opstille nogle søgeparametre, der gør om alt, eller kun noget pipes videre?)

DataGrid_oversigt.DataSource = Var ' Vi henter de hentede data ind i vores datagrid'
DataGrid_oversigt.DataMember = "vare" ' Vi sætter vores medlemsskaber til "vare"'
Avatar billede arne_v Ekspert
04. maj 2005 - 22:09 #22
ditdataset.ReadXml(new StringReader(ditdokument.SelectSingleNode("xpath søge udtryk").OuterXml))
Avatar billede slash_underscore Nybegynder
04. maj 2005 - 22:41 #23
Jeg vil kigge på sagerne, tak for hjælpen indtil videre...
Avatar billede slash_underscore Nybegynder
05. maj 2005 - 00:21 #24
Stringreader ikke fundet:

d:\dokumenter\Visual Studio Projects\WindowsApplication1\Lagerstyring.vb(611): Type 'StringReader' is not defined.
Avatar billede slash_underscore Nybegynder
05. maj 2005 - 00:26 #25
Det hjalp at tilføje:

Imports System.IO
Imports System.Text

Men nu skriver den:

An unhandled exception of type 'System.Xml.XPath.XPathException' occurred in system.xml.dll

Er der evt. noget galt med denne sekvens:


Document_Var.Load("var.xml") ' Vi henter vores data fra var.xml
Dataset_Var.ReadXml(New StringReader(Document_Var.SelectSingleNode("xpath søge udtryk").OuterXml))
DataGrid_oversigt.DataSource = Dataset_Var ' Vi henter de hentede data ind i vores datagrid
DataGrid_oversigt.DataMember = "vare" ' Vi sætter vores medlemsskaber til "vare"
Additional information: System error.
Avatar billede arne_v Ekspert
07. maj 2005 - 20:28 #26
ikke jeg kan se

men .NET mener det jo tilsyneladende anderledes
Avatar billede slash_underscore Nybegynder
08. maj 2005 - 17:12 #27
Kan du fortælle mig hvad der er galt her:

Search_DataView.RowFilter = Combo_Search.SelectedItem & "LIKE '%" & TextBox_Search.Text & "%'"

???
Avatar billede slash_underscore Nybegynder
08. maj 2005 - 17:45 #28
Og mon du ved hvordan man undgår at der står "null" i nye felter?

http://www.eksperten.dk/spm/615249
Avatar billede arne_v Ekspert
08. maj 2005 - 18:29 #29
prøv og sæt et mellemrun ind foran LIKE

Search_DataView.RowFilter = Combo_Search.SelectedItem & "  LIKE '%" & TextBox_Search.Text & "%'"
Avatar billede arne_v Ekspert
08. maj 2005 - 18:30 #30
ingen anelse om det null - jeg er ikke speciel god til GUI programmering
Avatar billede slash_underscore Nybegynder
08. maj 2005 - 19:00 #31
Oki ... takker... du skal ihvertfald have point !!! svar?
Avatar billede arne_v Ekspert
08. maj 2005 - 19:01 #32
kommer her
Avatar billede arne_v Ekspert
28. maj 2005 - 16:54 #33
så mangler du bare at acceptere ....
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
Kurser inden for grundlæggende programmering

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