Benutzer mit den meisten Antworten
Change Value in XML-Document (C#)

Frage
-
Hi,
how can I select and change the value "Entwicklung" (bold, unterline) in this XML in C#?
Thank you
Regards
Nicole<?xml version="1.0" encoding="utf-8"?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- Pfad zu log-Verzeichnis --> <variable name="logDir" value="${specialfolder:folder=ApplicationData}/BAMF/Maris/logs"/> <variable name="logFile" value="${shortdate}.log"/> <variable name="umgebung" value="Entwicklung"/> </nlog>
Antworten
-
Hallo, ich nehme mal an das du Deutsch kannst, zumal wir hier sowieso in einem deutschen Forum sind ;)
Du kannst beispielsweise die Datei in ein XDocument laden, danach vom Root mithilfe der Descendant-Methode den Knoten abfragen. Nun musst du noch alle druchgehen bis du deinen richtigen Knoten hast und diesen aknnst du dann ändern und schließlich wieder speichern. Im Code könnte es beispielsweise so aussehen:
XDocument doc = XDocument.Load("DATEINAME...");//Datei laden XElement el = (from x in doc.Root.Descendants("variable")//Knoten ermitteln und einzeln mithilfe von LINQ durchgehen where x.Attribute("name").Value == "umgebung"//Auf den Attributwert abfragen select x).Single();//Element auswählen und schließlich das erste benutzen el.SetAttributeValue("value", "Das neue Value...");//Wert setzen doc.Save("DATEINAME");//Datei speichern
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets
Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
Einen Konverter zwischen C# und VB.NET Code gibt es hier.- Als Antwort markiert Marcel RomaModerator Mittwoch, 29. Mai 2013 10:49
Alle Antworten
-
Hallo, ich nehme mal an das du Deutsch kannst, zumal wir hier sowieso in einem deutschen Forum sind ;)
Du kannst beispielsweise die Datei in ein XDocument laden, danach vom Root mithilfe der Descendant-Methode den Knoten abfragen. Nun musst du noch alle druchgehen bis du deinen richtigen Knoten hast und diesen aknnst du dann ändern und schließlich wieder speichern. Im Code könnte es beispielsweise so aussehen:
XDocument doc = XDocument.Load("DATEINAME...");//Datei laden XElement el = (from x in doc.Root.Descendants("variable")//Knoten ermitteln und einzeln mithilfe von LINQ durchgehen where x.Attribute("name").Value == "umgebung"//Auf den Attributwert abfragen select x).Single();//Element auswählen und schließlich das erste benutzen el.SetAttributeValue("value", "Das neue Value...");//Wert setzen doc.Save("DATEINAME");//Datei speichern
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets
Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
Einen Konverter zwischen C# und VB.NET Code gibt es hier.- Als Antwort markiert Marcel RomaModerator Mittwoch, 29. Mai 2013 10:49
-
Hi gpc,
also ich weiss nicht genau was du machen willst....
Wenn du Unterstrichen und Fett geschrieben im XML Dokument haben willst, das wird nicht klappen, du kannst halt nur wie Koopakiller geschrieben hast Werte setzen oder Attribute anfügen
<variable name="umgebung" value="Entwicklung" isBold=true/>
-
Hallo zusammen,
ich würde das XML-Dokument laden, eine XPath-Abfrage erstellen, die mir den gewünschten Node zurückgibt, und darin würde ich dann den gewünschten Attributwert überschreiben:
// XML-Dokument laden var logFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "log.xml"); XmlDocument xDoc = new XmlDocument(); xDoc.Load(logFile); // Namespaceresolver erstellen XmlNamespaceManager namespaceManager = new XmlNamespaceManager(xDoc.NameTable); namespaceManager.AddNamespace("bogus", "http://www.nlog-project.org/schemas/NLog.xsd"); // XPath-Abfrage: Aus dem Namespace 'bogus' wähle jenes 'variable'-Element // dessen 'name'-Attribut den Wert 'umgebung' und dessen
// 'value'-Attribut den Wert 'Entwicklung' aufweisen. var elementEntwicklung = xDoc.SelectSingleNode("//bogus:variable[@name='umgebung' and @value='Entwicklung']", namespaceManager); if (elementEntwicklung != null) { // Attribut-Wert ändern elementEntwicklung.Attributes["value"].Value = "Neu"; // Geändertes XML-Dokument speichern xDoc.Save(logFile); }Den XPath-Ausdruck kann man über String.Format("//bogus:{0}[@{1}='{2}' and @{3}='{4}']", elementName, attribut1Name, attribut1Wert, attribut2Name, attribut2Wert) dynamisch erstellen und so mit weiteren Elementen und Attributen wiederverwenden.
Und falls Du dich ob des "bogus"-Präfixes wundern solltest, hier kommt die Erklärung (die deutsche Übersetzung ist leider unverständlich):
HOW TO: Specify Namespaces When You Use an XmlDocument to Execute XPath Queries in Visual C#
Gruß
Marcel
- Bearbeitet Marcel RomaModerator Dienstag, 30. April 2013 21:44