Du bist nicht angemeldet.
Was für ein Mensch muss man sein um "blumen" zu ändern.
Tiere!
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
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:
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
Nachbtrachtung:
Vielleicht findet sich der ein oder andere Blumenfreund, der MeineBlumen in einer anderen Programmiersprache oder mit anderen Ansätzen umsetzt.