Odczyt pliku xml

0

Witam serdecznie!

Mam dość duży problem. Przejdę do sedna sprawy. Otóż mam powiedzmy taki plik xml (plik.xml):

<polyline closed="false" id="FO"> <point x="1378.9" y="656.42" /> <point x="1378.76" y="693.996" /> <point x="1379.44" y="731.5649" /> </polyline> <polyline closed="true" id="MO"> <point x="980.76" y="1018.3" /> <point x="997.805" y="1030.9098" /> <point x="1017.36" y="1039.366" /> </polyline>

Teraz, muszę odczytać z tego właściwie dwie rzeczy:

  • id, czyli "FO" lub "MO"
  • wartość x i y każdego punktu

Zabierałem się już do tego kilka razy, próbowałem zrobić to za pomocą XmlDocument oraz XmlTextReader, ale jakoś nie mogę sobie z tym poradzić w tym przypadku. Czy ktoś mógłby mnie naprowadzić jak zabrać się do tego? Będę bardzo wdzięczny.

Pozdrawiam
Radzio

BL
  • Rejestracja:prawie 18 lat
  • Ostatnio:ponad 16 lat
0

Witaj :)
Pierwsza sprawa to wydaje mi się, że struktura Twojego pliku XML jest niewłaściwa... Przypisujesz niepotrzebnie wartości atrybutom. Zaproponowałbym taką strukturę pliku:

Kopiuj
<root>
	<polyline id="FO">
        	<point id="0"> 
			<x>1378.9</x>
			<y>656.42</y>
		</point>
		<point id="1"> 
			<x>1378.76</x>
			<y>693.996</y>
		</point>
		<point id="2"> 
			<x>1379.44</x>
			<y>731.5649</y>
		</point>
	</polyline>
	<polyline id="MO">
        	<point id="0"> 
			<x>980.76</x>
			<y>1018.3</y>
		</point>
		<point id="1"> 
			<x>997.805</x>
			<y>1030.9098</y>
		</point>
		<point id="2"> 
			<x>1017.36</x>
			<y>1039.366</y>
		</point>
	</polyline>
</root>

I mój sposób odczytu... może nie jest najpiękniejszy ale zazwyczaj tak odczytuje pliki XML:

Kopiuj
while (reader.Read())
{
    if (reader.NodeType == XmlNodeType.Element)
    {
        if (reader.Name == "polyline")
        {
            reader.MoveToFirstAttribute();
            Console.WriteLine("Polyline id = " + reader.Value);
        }

        else if (reader.Name == "point")
        {
            reader.MoveToFirstAttribute();
            Console.WriteLine("Point id = " + reader.Value);
            reader.MoveToContent();

            while (reader.Name != "x")
                reader.Read();

            Console.Write("Wartosc x = ");

            while (reader.NodeType != XmlNodeType.Text)
                reader.Read();

            Console.Write(reader.Value);
            Console.WriteLine();

            while (reader.Name != "y")
                reader.Read();

            Console.Write("Wartosc y = ");

            while (reader.NodeType != XmlNodeType.Text)
                reader.Read();

            Console.Write(reader.Value);
            Console.WriteLine();
        }
    }
}

reader to oczywiście obiekt klasy XMLTextReader

Kopiuj
XmlTextReader reader = new XmlTextReader(Environment.CurrentDirectory + "\\plik.xml");

Mam nadzieję, że to Ci pomoże :):)

pelsta
  • Rejestracja:prawie 19 lat
  • Ostatnio:17 dni
  • Postów:819
0

W Delphi jest taki komponent

http://jansfreeware.com/janxmltree.zip

darek963
  • Rejestracja:prawie 23 lata
  • Ostatnio:ponad 7 lat
0
bleedow napisał(a)

Witaj :)
Pierwsza sprawa to wydaje mi się, że struktura Twojego pliku XML jest niewłaściwa... Przypisujesz niepotrzebnie wartości atrybutom.

A właśnie że potrzebnie, bo współrzędne są jak najbardziej atrybutami punktu. Poza tym po co ci ID w punkcie? Moim zdaniem twoja struktura jest do bani.

BL
  • Rejestracja:prawie 18 lat
  • Ostatnio:ponad 16 lat
0

Witam.
Atrybut "id" to odruchowo i rzeczywiście nie spełnia on tutaj swojej roli :P - jeżeli chodzi o resztę to myślę, że jest wiele sposób na zapisywanie struktury plików XML... w sumie pełna dowolność :)

<url> http://www.mh-aerotools.de/airfoils/xml_airfoil_format.htm </url>

Jeżeli chodzi o rozwiązanie dla wcześniejszego pliku wystarczy, będąc w elemencie point, przechodzić po atrybutach funkcjami MoveToFirstAttribute(); oraz MoveToNextAttribute(); Pozdrawiam

darek963
  • Rejestracja:prawie 23 lata
  • Ostatnio:ponad 7 lat
0
bleedow napisał(a)

Witam.
Atrybut "id" to odruchowo i rzeczywiście nie spełnia on tutaj swojej roli :P - jeżeli chodzi o resztę to myślę, że jest wiele sposób na zapisywanie struktury plików XML... w sumie pełna dowolność :)

Są też miliony sposobów na zapisywanie danych w formatach innych niż XML. Pełna dowolność...
Przeczytaj lepiej uważnie pytanie.

BL
  • Rejestracja:prawie 18 lat
  • Ostatnio:ponad 16 lat
0

Naprawdę nie wiem o co Ci chodzi...

Przejdę do sedna sprawy. Otóż mam powiedzmy taki plik xml (plik.xml)
(...)
Teraz, muszę odczytać z tego właściwie dwie rzeczy:

  • id, czyli "FO" lub "MO"
  • wartość x i y każdego punktu

Jeżeli uważasz, że moja odpowiedź nie rozwiązuje problemu to zaproponuj swoje rozwiązanie, poza tym mam dziwne wrażenie, że starasz się być niemiły... sam widzisz, że autor wątku nie jest zainteresowany odpowiedzią to po co się ścierać na takim problemie?? Trzymaj się, pozdrawiam

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.