webForumDet fria alternativet

data från dataset (xml)

5 svar · 272 visningar · startad av Mc Fetto

Mc FettoMedlem sedan nov. 20022 355 inlägg
#1

Hej, jag försöker få ut viss data från ett dataset som laddats in från en xml-fil. det går bra till viss del.. Så här ser en liten del av xml-filen ut:

<site>
	<name>xyz</name>
	<url>xyz</url>
	<port>xyz</port>
	<user>xyz</user>
	<pass>xyz</pass>
	<notes>xyz</notes>
	<bookmarks>
		<bookmark>/xyz/xyz/</bookmark>
		<bookmark>/xyz/xyz/</bookmark>	
	</bookmarks>	
</site>

Jag kan enkelt ta ut all data utom bookmark och det lägger jag i en arraylist (sites), där jag lägger in objekt av typen site (motsvarar site i xml-filen).

            foreach(DataRow dr in ds.Tables[0].Rows)
            {
                site = new Site(dr["name"].ToString(), dr["url"].ToString()... );
                sites.Add(site);
                ...

Jag vet inte riktigt hur jag ska komma åt bookmarks på ett smidigt sätt. Någon som kan hjälpa mig?
:)

Mc FettoMedlem sedan nov. 20022 355 inlägg
#2

Löste det genom att INTE använda mig av DataSet, tycker DataSet är lite svårt att visualisera i huvet mitt. Så här blev det:

XmlDocument doc = new XmlDocument( );
if (!File.Exists("sites.xml"))
    return;
doc.Load("sites.xml");

XmlNodeList node = doc.GetElementsByTagName( "site" );

XmlNodeList bookmark;

XmlNodeList content;
Site site;
for ( int i = 0; i < node.Count; ++i )
{
    content = node[i].ChildNodes;
    
    site = new Site(content[0].InnerText , content[1].InnerText, content[2].InnerText, content[3].InnerText, content[4].InnerText, content[5].InnerText);

    if (content[6] != null)
    {
        bookmark = content[6].ChildNodes;
        for (int k=0;k<bookmark.Count;k++)
            site.SetBookMark(bookmark[k].InnerText);  
    }
    sites.Add(site);
}

Det tråkiga är att jag kör detta när jag vill få upp ett nytt fönster och då tar det en liten stund (liten fördröjning), fast där bara är nio element av site i xml-filen. Finns det något sätt att göra detta effektivare? Någon får även gärna pressentera en lösning på det sättet jag först ville göra! Tackars :)

NöffMedlem sedan nov. 2003569 inlägg
#3

Men för böveln, DataSet är ju det finaste som finns :D

DataSet.Tables["bookmark"] där har du dina bookmark.

Men det finns ett svin-smidigt sätt att lösa ditt problem genom endast 2 rader kod.. ett datagrid och dataset:et... ös upp ett datagrid och bind det till ett datagrid... datagrid:et löser resten

DataSet.ReadXml("C:\\filen.xml",XmlReadMode.Auto);
dataGrid1.DataSource=DataSet; //ange INTE någon Tabell!!!

Mc FettoMedlem sedan nov. 20022 355 inlägg
#4

Nöff skrev:

Men för böveln, DataSet är ju det finaste som finns :D

DataSet.Tables["bookmark"] där har du dina bookmark.

Men det finns ett svin-smidigt sätt att lösa ditt problem genom endast 2 rader kod.. ett datagrid och dataset:et... ös upp ett datagrid och bind det till ett datagrid... datagrid:et löser resten

DataSet.ReadXml("C:\\filen.xml",XmlReadMode.Auto);
dataGrid1.DataSource=DataSet; //ange INTE någon Tabell!!!

Anade att du skulle fälla en komentar om DataSet ;) Men jag är mindre intresserad av att pressentera informationen i en datagrid. Som jag har löst det nu så läser jag in xml-filen i en klass som repressenterar xml-filen och sedan pressenterar jag informationen i diverse controller.

NöffMedlem sedan nov. 2003569 inlägg
#5

Men du kan ju göra såhär för att få datat ur dataset:et

label1.Text=DataSet.Tables["bookmark"].Rows[0]["din kolumn"].ToString()

emissionMedlem sedan dec. 19996 721 inlägg
#6

En helt OK lösning, Mc Fetto. Tänk bara på att den kommer att balla ur om XML-strukturen förändras, eller tillfälligt råkar bli fel.

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)