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

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:

<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:

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

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

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

0

W Delphi jest taki komponent

http://jansfreeware.com/janxmltree.zip

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.

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

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.

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

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