Sziasztok!
Windows Phone-ra fogok elkészíteni egy szegedi menetrend alkalmazást. A menetrend adatait XML állományokban fogom eltárolni. Egy weboldal forráskódjában sikerült megtalálnom a megállók neveit és koordinátáit. A feladatom az volt, hogy ebből a forráskódból kiszedjem a nekem megfelelő szövegrészeket, a megállók neveit és koordinátáit. Ehhez írtam C#-ban egy kis programot, ami ezt végrehajtja.
Az oldal forráskódját egy egyszerű szöveges fájlba mentettem el. Ahhoz, hogy a szövegből kiszedjem a megfelelő adatokat, meg kellett határoznom egy reguláris kifejezést, ami illeszkedik a szegedi megállók nevére (később a koordinátájára). Ehhez van egy osztály C#-ban, mégpedig a Regex (Regular Expression). A mintára illeszkedő találatokat MatchCollection listában lehet elérni, egy találatra pedig Match típusú lesz. A feldolgozás során szükségem lehet olyan műveletre, ami visszaad két sztring vagy karakter közötti szövegrészt. Erre lehet használni a Split függvényt, ami egy szövegrészt feldarabol egy adott karakter mentén, a darabokra tömbindex alapján lehet hivatkozni. Ha két sztring közötti részletre van szükség, ahhoz nincs C#-ban függvény, de könnyen meg lehet valósítani, a következőképpen:
String BetweenStrings(String stream, String begin, String end){ String final; int pos1 = stream.IndexOf(begin) + begin.Length; int pos2 = stream.IndexOf(end); final = stream.Substring(pos1, pos2 - pos1); return final; }
Ahol a stream az a szöveg, amiben keresünk és a begin és end közötti részt adja vissza a függvény.
Ehhez a témához tartozó linkek:
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx
http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet
http://nyelvek.inf.elte.hu/leirasok/Csharp/index.php?chapter=17
A következő lépés a találatokat XML-é alakítani. C#-ban ehhez szintén van egy osztály, amivel ezt meg lehet valósítani. Ez az XmlWriter, vagy az XmlTextWriter. Én az XmlTextWritert használtam. Paraméterül meg kell adni példányosításnál a létrehozandó XML fájl nevét (és elérési útját) és egyéb tulajdonságokat be lehet még állítani. Fontos, ha nem állítjuk be a writer.Formatting = Formatting.Indented
-t, akkor egyetlen sorból fog állni az XML fájl. A writer.WriteStartDocument()
–tel kezdjük az XML írását és a writer.WriteEndDocument()
–tel zárjuk. Közéjük kerülnek az XML-t felépítő elemek (writer.WriteStartElement()
), amik ebben az esetben megállók lesznek, és ezeknek beálltjuk az attribútumait (write.WriteElementString()
).
XmlTextWriter writer = new XmlTextWriter("stops.xml", Encoding.Unicode );
writer.Formatting = Formatting.Indented;
writer.WriteStartDocument();
writer.WriteStartElement("stops");
foreach (Stop stop in stops){
writer.WriteStartElement("stop");
writer.WriteElementString("id", stop.Id.ToString());
writer.WriteElementString("location", stop.Location);
writer.WriteElementString("coord1", stop.Coord1);
writer.WriteElementString("coord2", stop.Coord2);
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();
A létrejött XML állomány:
<?xml version="1.0" encoding="utf-16"?>
<stops>
<stop>
<id>1</id>
<location>Acél u.</location>
<coord1>46.277783</coord1>
<coord2>20.170945</coord2>
</stop>
<stop>
<id>2</id>
<location>Agyagos u.</location>
<coord1>46.27256</coord1>
<coord2>20.155573</coord2>
</stop>...
Kapcsolódó linkek:
http://msdn.microsoft.com/en-us/library/system.xml.xmltextwriter.aspx
http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx
http://www.dotnetperls.com/xmltextwriter
http://www.lessthanweb.com/blog/writing-xml-in-c-net-with-xmltextwriter
A következő bejegyzésemben a járatokhoz tartozó megállók és indulási idők lekéréséről fogok írni remélhetőleg. 🙂
Üdv.
Emese