Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


läsa nästlade XML- taggar i C#

Postades av 2008-01-14 14:53:57 - Martin Hansson, i forum c# (c-sharp), Tråden har 9 Kommentarer och lästs av 2172 personer

Hej.
Jag har ett litet problem med att läsa nästlade xml-taggar.
Så här ser xml-filen ut. En massa ärenden som kan ha en eller flera "omfattningar".
Problemet är att den läser in första ärendet med rätt omfattningar, läser sedan in ärende #2, men med omfattningarna från ärende #1. Eller tvärtom, läser in ärende 1 med omfattningar, läser sedan in resterande omfattningar. Detta beroende p åhur jag flyttar omkring "break;"

<bas>
	<arende>
		<arendenummer>111111</arendenummer>
		<arendetyp>Serverjobb</arendetyp>
		<omfattning>
			<id>123</id>
			<namn>ab</namn>
		</omfattning>
		<omfattning>
			<id>234</id>
			<namnbcnamn>
		</omfattning>
	</arende>
	<arende>
		<arendenummer>111111</arendenummer>
		<arendetyp>Serverjobb</arendetyp>
		<omfattning>
			<id>345</id>
			<namn>cd</namn>
		</omfattning>
		<omfattning>
			<id>456</id>
			<namn>de</namn>
		</omfattning>
	</arende>
</bas>


Hur ska jag göra för att läsa de nästlade taggarna.

Min förenklade C#-kod, inklusive lite pseudo-kod
XmlDocument doc = new XmlDocument();
doc.Load(fileName);
XmlNodeList nodes = doc.SelectNodes("bas/arende/*");
foreach (XmlNode node in nodes)
{
     //kolla varje nodnamn och ta in värdena.
     .
     .
     .
     //
     if(nodnamn == omfattning)    //Här börjar de nästlade noderna
     {
          //läs in varje omfattning
          XmlNodeList nodesInOmfattning = doc.SelectNodes("bas/arende/omfattning/*");
          foreach (XmlNode node2 in nodesInOmfattning)
	  {
		//ID
		if (node2.LocalName == xml_omfattningId)
		{
			//Lagra värden
		}
                //osv...
          }break;
      }
}


Svara

Sv: läsa nästlade XML- taggar i C#

Postades av 2008-01-14 14:58:10 - Oskar Johansson

Raden:
XmlNodeList nodesInOmfattning = doc.SelectNodes("bas/arende/omfattning/*");
borde vara:
XmlNodeList nodesInOmfattning = node.SelectNodes("omfattning/*");


Svara

Sv:läsa nästlade XML- taggar i C#

Postades av 2008-01-14 16:02:52 - Martin Hansson

tackar för hjälpen.. dock hoppar den aldrig in i den noden då..
Nu kommer hela koden .-

Går säkerligen att lösa på ett mycket smidigare sätt, och om ngn vet hur, skrik gärna till =)

			XmlNodeList nodes = doc.SelectNodes("mirjam/arende/*");
			listBox1.BeginUpdate();
			foreach (XmlNode node in nodes)
			{
				//Ärendenummer
				if (node.Name == xml_arendenummer)
				{
					controlCount++;
					newArende.Arendenummer = Int32.Parse(node.InnerText);
					listBox1.Items.Add(node.InnerText.ToString());
				}
				//Ärendetyp
				if (node.Name == xml_arendeTyp)
				{
					controlCount++;
					newArende.Arendetyp = node.InnerText;
					listBox1.Items.Add(node.InnerText.ToString());
				}
				//Beskrivning
				if (node.Name == xml_beskrivning)
				{
					controlCount++;
					newArende.Beskrivning = node.InnerText;
					listBox1.Items.Add(node.InnerText.ToString());
				}
				//Driftinfo Visas Från
				if (node.Name == xml_driftinfoVisasFran)
				{
					controlCount++;
					newDateTime = DateTime.Parse(node.InnerText);
					newArende.setDriftInfoFran(newDateTime);
					listBox1.Items.Add(node.InnerText.ToString());
				}
				//Driftinfot
				if (node.Name == xml_driftinfo)
				{
					controlCount++;
					newArende.Driftinfo = node.InnerText;
					listBox1.Items.Add(node.InnerText.ToString());
				}
				//Klassning
				if (node.Name == xml_klassning)
				{
					controlCount++;
					newArende.Klassning = Int32.Parse(node.InnerText);
					listBox1.Items.Add(node.InnerText.ToString());

				}
				//Rubrik
				if (node.Name == xml_rubrik)
				{
					controlCount++;
					newArende.Rubrik = node.InnerText;
					listBox1.Items.Add(node.InnerText.ToString());
				}
				//Status
				if (node.Name == xml_status)
				{
					controlCount++;
					newArende.Status = node.InnerText;
					listBox1.Items.Add(node.InnerText.ToString());
				}
				//Planerad Start
				if (node.Name == xml_planStart)
				{
					controlCount++;
					newDateTime = DateTime.Parse(node.InnerText);
					newArende.PlaneradStart = newDateTime;
					listBox1.Items.Add(node.InnerText.ToString());
				}
				//Planerad Slut
				if (node.Name == xml_planSlut)
				{
					newDateTime = DateTime.Parse(node.InnerText);
					newArende.PlaneradSlut = newDateTime;
					listBox1.Items.Add(node.InnerText.ToString());
				}
				//Avbrottstid i Min
				if (node.Name == xml_avbrottMin)
				{
					controlCount++;
					newArende.AvbrottsTidMin = Int32.Parse(node.InnerText);
					listBox1.Items.Add(node.InnerText.ToString());
				}
				//Avbrottstid i Timmar
				if (node.Name == xml_avbrottTim)
				{
					controlCount++;
					newArende.AvbrottsTidTim = Int32.Parse(node.InnerText);
					listBox1.Items.Add(node.InnerText.ToString());
				}
				//Är brytning Godkänd?
				if (node.Name == xml_brytningGodkand)
				{
					controlCount++;
					newArende.BrytningGodkand = Int32.Parse( node.InnerText.Trim() );
					listBox1.Items.Add(node.InnerText.ToString());
				}
				//Är brytning Kundstörande?
				if (node.Name == xml_kundstorande)
				{
					controlCount++;
					newArende.Kundstorande = Int32.Parse(node.InnerText.Trim() );
					listBox1.Items.Add(node.InnerText.ToString());
				}
				
				//Ny XMLPath för att söka igenom alla omfattningar.
				XmlNodeList nodesInOmfattning = node.SelectNodes("omfattning/*");

				//Omfattning
				if (node.Name == xml_omfattning)
				{
					foreach (XmlNode n in nodesInOmfattning)
					{
						//ID
						if (n.LocalName == xml_omfattningId)
						{
							listBox1.Items.Add(n.InnerText.ToString());
							newOmfattning.Id = Int32.Parse(n.InnerText.ToString());
						}
						//Namn
						if (n.LocalName == xml_omfattningNamn)
						{
							listBox1.Items.Add(n.InnerText.ToString());
							newOmfattning.Namn = n.InnerText.ToString();
						}
						//System
						if (n.LocalName == xml_omfattningSystem)
						{
							listBox1.Items.Add(n.InnerText.ToString());
							newOmfattning.System = n.InnerText.ToString();
						}
						//Anreg
						if (n.LocalName == xml_omfattningAnreg)
						{
							listBox1.Items.Add(n.InnerText.ToString());
							newOmfattning.Anreg = n.InnerText.ToString();
						}
						//Växel
						if (n.LocalName == xml_omfattningVxl)
						{
							listBox1.Items.Add(n.InnerText.ToString());
							newOmfattning.Vxl = n.InnerText.ToString();
						}
						//Status
						if (n.LocalName == xml_omfattningStatus)
						{
							listBox1.Items.Add(n.InnerText.ToString());
							newOmfattning.Status = n.InnerText.ToString();
						}
						//lägg till omfattningsobjekt i array
						newArende.addOmfattning(newOmfattning);
					} 
				}


Svara

Sv: läsa nästlade XML- taggar i C#

Postades av 2008-01-14 16:09:27 - Pelle Johansson

varför inte köra

ds.readxml(server.mappath("minfil.xml"));

sen är det lätt att iterera, flytta till gridview osv..


Svara

Sv: läsa nästlade XML- taggar i C#

Postades av 2008-01-14 21:47:48 - Oskar Johansson

Vad händer om du singelsteppar koden? Vad körs?


Svara

Sv:läsa nästlade XML- taggar i C#

Postades av 2008-01-15 09:48:47 - Martin Hansson

Hej.
Inte riktigt säker på om jag hängde med där.. vad är "ds" en instans av?

Edit: dataset kanske? ;)


Svara

Sv: läsa nästlade XML- taggar i C#

Postades av 2008-01-15 10:00:09 - Per Persson

Annat exempel på parsning av XML:
http://thedailywtf.com/Articles/Far-Too-Fancy.aspx


Svara

Sv:läsa nästlade XML- taggar i C#

Postades av 2008-01-15 10:11:06 - Martin Hansson

Singlesteppar jag ser jag att koden inte hoppar in i mina "omfattningar". Kör jag programmet så läser den in de nästlade taggarna men läser bara in de första nästlade "omfattnings-taggarna" för det ärende som står först i xml-filen.

dvs. läser in alla ärenden, men lägger till omfattningar från det första ärendet.

och vb kan jag tyvärr inte, för att svara på Per's inlägg. =)

Edit:
Det som är krångligt är att jag inte vet hur många omfattningar det finns för varje ärende.
Det kan vara allt från 1 till (i teorin) oändligt..
Någon som vet hur man åstadkommer detta?


Svara

Sv: läsa nästlade XML- taggar i C#

Postades av 2008-01-15 15:08:28 - Oskar Johansson

Det är alltså med den modifiering jag skrev..?


Svara

Sv:läsa nästlade XML- taggar i C#

Postades av 2008-01-15 19:58:30 - Martin Hansson

Ja det är det.. har provat alla möjliga varianter, men det vill sig inte riktigt.


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 710
27 958
271 751
542
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies