LINQ to XML odczyt danych - amator

0

mam xml'a

<?xml version="1.0" encoding="WINDOWS-1250"?>
<root>
	<WOJ>
		<Name>wielkopolskie</Name>
		<ID>001</ID>
		<MIASTO>
			<Name>Piła</Name>
			<KOD>64-920</KOD>
		</MIASTO>
		<MIASTO>
			<Name>Trzcianka</Name>
			<KOD>64-990</KOD>
		</MIASTO>
		<MIASTO>
			<Name>Kaczory</Name>
			<KOD>64-900</KOD>
		</MIASTO>
		<MIASTO>
			<Name>Złotów</Name>
			<KOD>78-900</KOD>
		</MIASTO>
	</WOJ>
	<WOJ>
		<Name>mazowieckie</Name>
		<ID>001</ID>
		<MIASTO>
			<Name>Warszawa</Name>
			<KOD>01-991</KOD>
		</MIASTO>
		<MIASTO>
			<Name>Ciechanów</Name>
			<KOD>05-000</KOD>
		</MIASTO>
		<MIASTO>
			<Name>Wolomin</Name>
			<KOD>06-000</KOD>
		</MIASTO>		
	</WOJ>
</root>

oraz kod

string XMLfile = @"c:\test.xml";
int licznik = 0;
          
XDocument miastaXml = XDocument.Load (XMLfile);

var query = from a in miastaXml.Elements("root").Elements("WOJ") where a.Element("Name").Value == "wielkopolskie" select a;
            foreach (var test in query)
            {
                licznik++;
                MessageBox.Show(test.Element("MIASTO").Element("Name").Value); 
            }
            MessageBox.Show(String.Format("Znaleziono {0} miast", licznik)); 

i niestety nie wyświetla mi wszystkich miast z woj. wielkopolskie tylko pierwsze i wychodzi. Dlaczego?
przy okazji widzę we wszystkich przykładach kod np Console.WriteLine(test); a u mnie ten kod ale nic się nie pojawia. Możliwe że jakiś banał

1
 var query = from woj in miastaXml.Element("root").Elements("WOJ")
             from miasto in woj.Elements("MIASTO")
             where woj.Element("Name").Value == "wielkopolskie"
             select miasto.Element("Name");

foreach (var test in query)
{
    licznik++;
    MessageBox.Show(test.Value);
}

A co do MessageBox co to za projekt Windows Forms?

1

przy okazji widzę we wszystkich przykładach kod np Console.WriteLine(test); a u mnie ten kod ale nic się nie pojawia.

Console.WriteLine działa w programach konsolowych (wybierasz to przy tworzeniu projektu).

Albo coś takiego, zresztą to zliczanie intem jakoś brzydko wygląda ;-)

		var miastaWlkp = from woj in XElement.Load("miasta.xml").Elements("WOJ")
			             where woj.Element("Name").Value == "wielkopolskie"
		                 select woj.Elements("MIASTO");

		var nazwyMiast = (from m in miastaWlkp select m.Element("Name").Value).ToArray();
		
		foreach (var m in nazwyMiast)
		{
			MessageBox.Show(m);
		}
	
		MessageBox.Show(String.Format("Znaleziono {0} miast", nazwyMiast.Length));

Nie sprawdzane.
Ogólnie to można to zapisać na wiele równoważnych sposobów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1