Hej. Raden: tackar för hjälpen.. dock hoppar den aldrig in i den noden då.. varför inte köra Hej. Annat exempel på parsning av XML: 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. Ja det är det.. har provat alla möjliga varianter, men det vill sig inte riktigt.läsa nästlade XML- taggar i C#
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;
}
}
Sv: läsa nästlade XML- taggar i C#
XmlNodeList nodesInOmfattning = doc.SelectNodes("bas/arende/omfattning/*");
borde vara:
XmlNodeList nodesInOmfattning = node.SelectNodes("omfattning/*");Sv:läsa nästlade XML- taggar i C#
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);
}
}
Sv: läsa nästlade XML- taggar i C#
ds.readxml(server.mappath("minfil.xml"));
sen är det lätt att iterera, flytta till gridview osv..Sv:läsa nästlade XML- taggar i C#
Inte riktigt säker på om jag hängde med där.. vad är "ds" en instans av?
Edit: dataset kanske? ;)Sv: läsa nästlade XML- taggar i C#
http://thedailywtf.com/Articles/Far-Too-Fancy.aspxSv:läsa nästlade XML- taggar i C#
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?Sv:läsa nästlade XML- taggar i C#