Du bist nicht angemeldet.

#1 25.04.2017 15:22

DannyF
Mitglied
Registriert: 08.09.2016
Beiträge: 124

[MiniProjekt] MeineBlumen

Vorüberlegung:
Ich - als Blumenfreund - habe eine XML Datein in den ich meine Lieblingsblumen gespeichert habe.
Nun ist es so, dass ich in meiner XML Datein sowohl den deutschen Namen als auch die Blumenbezeichnung in Latein angegeben habe.
Nun möchte ich meinen Namen umbenennen in den Latein-Namen:
29012537yc.png
Vorbereitung:
Da die Umsetzung in C# erfolgt, brauch ich einen C#-Compiler.
Also einen Compiler installiert (Linux): (anderen OS C# Compiler: kA)

sudo apt install mono-mcs

- Ein Verzeichniss "MeineBlumen" angelegt.
- Eine mB.cs erstellt und den Scource reinkopiert,
- Eine flower.xml erstellt und den Scource reinkopiert.

mB.cs

/* Das Programm wird aufgerufen mit 3 Befehlszeilen-Argumente:
 * 1. Name einer XML Datei * 2. < > * 3. < > 
 * **********************************************
 */
using System;
using System.Xml;
using System.Xml.XPath;
using System.Collections.Generic;

namespace IchBinEinBlumenmann
{
	class MeineBlumen
	{
		static void Main(string[] args)
		{
			/* Variablen ***********************************************/
			var myXmlCont = "blumen";								  // Mein XML Container
			var myXmlLang = "de";									 // Meine Lieblingssprache
			/* Ende Variablen ***************************************/
			var myArgs = Environment.GetCommandLineArgs();  	   // Argumente die Übergeben werden 
			try
			{	/* Versuche alle möglichen Dinge zu öffnen/initalisieren: XML File, XmlTextReader, Navigator, ... */
				string xmlFileName = myArgs [1].ToString ();
				XmlDocument blumenXML = new XmlDocument();
				blumenXML.Load(xmlFileName);
				int AnzahlBlumen = 0;
				int check=0;
				List<meineBlumenListe> _jedeBlume = new List<meineBlumenListe>(); // meine Blumen Liste

				/* Lesen ist wichtig */
				XmlTextReader reader = new XmlTextReader (xmlFileName);
				string BlumenArg = "";
				int aktWert = 0;
				int checkbeide = 0;
				int j = 0;
				while (reader.Read()) 
				{
					// Das sind die BlumenContainer
					if (reader.Name == myXmlCont) if (reader.NodeType == XmlNodeType.Element) AnzahlBlumen++;

					if (reader.Name == myArgs[2]) if (reader.NodeType == XmlNodeType.Element) check = 1;
					if (reader.Name == myArgs[3]) if (reader.NodeType == XmlNodeType.Element) check = 2;
					// Sprache
					if (reader.Name == myXmlLang)
					{ 
						if ((reader.NodeType == XmlNodeType.Element) && (check == 1)) {	check=0; aktWert=1;	}
						if ((reader.NodeType == XmlNodeType.Element) && (check == 2)) {	check=0; aktWert=2;	}
						if (reader.Read() && aktWert !=0)
						{ 
							if (aktWert == 1) {	BlumenArg= reader.Value.Trim(); checkbeide=1; }
							if (aktWert == 2) 
							{
								if (checkbeide==1) 
								{
									checkbeide=0; j++;
									_jedeBlume.Add(new meineBlumenListe() {BlumenID = AnzahlBlumen, wert1=BlumenArg, wert2=reader.Value.Trim()});
								}
								BlumenArg= reader.Value.Trim();
							} aktWert = 0;
						}
					}
				}
				/* Schreiben ist auch wichtig*/
				XPathNavigator navigator = blumenXML.CreateNavigator();
				XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);
				manager.AddNamespace("blumenkunde", "");
				int k = 0;
				foreach (XPathNavigator nav in navigator.Select("//blumenkunde:"+myXmlLang, manager))
				{ 
				//Console.WriteLine(nav.Value);
				if (k<j)
				if ((nav.Value == _jedeBlume[k].wert1))
				{			
						nav.SetValue(_jedeBlume[k].wert2);
						Console.WriteLine("ID {0} : '{1}'  wird zu '{2} ' ",_jedeBlume[k].BlumenID,_jedeBlume[k].wert1,_jedeBlume[k].wert2);
						k++;
					} 
				}
				Console.WriteLine("{0} {1} gelesen. {2} Übereinstimmungen gefunden.", AnzahlBlumen, myXmlCont, j);
				blumenXML.Save(myArgs [1].ToString ()+".save");  // Am Ende speichern wir unsere XML mit dem Postfix .save
			}
			catch (XmlException e)
			{
				Console.WriteLine("Ausnahmebehandlung: " + e.ToString());
			}
		}
	public class meineBlumenListe  // Das ist eine Klasse Liste 
	{
		public int BlumenID { get; set; }
		public string wert1 { get; set; } 
		public string wert2 { get; set; }
	}
} // Ende MeineBlumen
} // Ende


flower.xml

<?xml version="1.0" encoding="utf-8"?>
<mlb>
  <alleblumen>
    <blumen>
      <name>
        <de>Brandkraut</de>
        <en>Brand herb</en>
      </name>
      <name_latein>
        <de>Das Artemisia abrotanum</de>
        <en>The Artemisia abrotanum</en>
      </name_latein>
      <description>
        <de>Herbwürzige Eberraute.Volksname : Eberraute</de>
        <en></en>
      </description>
    </blumen>
    <blumen>
      <name>
        <de>Ahorn</de>
        <en>maple</en>
      </name>
      <name_latein>
        <de>Der Acer</de>
        <en>The Acer</en>
      </name_latein>
      <description>
        <de>Diese Pflanze ist vollkommen winterhart. </de>
        <en></en>
      </description>
    </blumen>
    <blumen>
      <name>
        <de>Rose</de>
        <en>rose</en>
      </name>
      <description>
        <de>Sommerblühend. Die Blütenfarbe ist rosa.</de>
        <en></en>
      </description>
    </blumen>
    <blumen>
      <name>
        <de>Ölweide</de>
        <en></en>
      </name>
      <name_latein>
        <de>Die Elaeagnus angustifolia</de>
        <en>The Elaeagnus angustifolia</en>
      </name_latein>
      <description>
        <de>Ölweide, sparriger kleiner Baum; Blatt silbergr. behaart.</de>
        <en></en>
      </description>
    </blumen>
    <blumen>
      <name>
        <en></en>
      </name>
      <name_latein>
        <de>Die Hamamelis</de>
        <en></en>
      </name_latein>
      <description>
        <de>Pflanzenhöhe n. 10 Jahren 4 m. Die Blütenfarbe ist kupferfarben orange.</de>
        <en></en>
      </description>
    </blumen>
  </alleblumen>
</mlb>

Und dann
29012538zr.png

Nachbtrachtung:
Vielleicht findet sich der ein oder andere Blumenfreund, der MeineBlumen in einer anderen Programmiersprache oder mit anderen Ansätzen umsetzt.

Offline

#2 25.04.2017 15:38

Ronny
Administrator
Ort: Chemnitz
Registriert: 08.11.2001
Beiträge: 11.704
Webseite

Re: [MiniProjekt] MeineBlumen

Ich wette, der eine oder andere kann den Code sogar abwandeln (bzw. eigentlich sogar nur die Parameter der .exe) ... und statt "name"->"name_latein" auch "vorname"->"nachname" nutzen.
Ach nein, dafuer muesste man noch "blumen" per Parameter aendern koennen.

Aus "blumen" koennte dann "person" werden - so wegen Stammbaum.xml. Oder es wird zu "item" (was ja haeufig anzutreffen sein sollte).



Zum Thema Blumen: Ich hege und pflege zwar meine Pflanzen, aber bei dem Grossteil weiss ich nicht, wie sie heissen. Bei den Peperoni kenn ich nur die groben Sorten und selbst die Petersilie heisst hier einfach nur "krause Petersilie" :-)


PS: Ich sehe, "Der Blumenfreund" als kleine fiktive Serie fuer TVTower kommt dann von Dir :-)


bye
Ron


sigimg2.php?id=1

Offline

#3 25.04.2017 16:01

lump
Gast

Re: [MiniProjekt] MeineBlumen

Was für ein Mensch muss man sein um "blumen" zu ändern.
Tiere!

29013128px.jpg

Schnellantwort auf dieses Thema

Schreibe deinen Beitrag und versende ihn
Bist Du ein Mensch oder ein Roboter ?

Verifizierung, dass diese Aktion durch eine reale Person vorgenommen wird und nicht von einem Programm.