Entwickler-Ecke
Basistechnologien - Suchen und Ersetzen bei unbekannten Werten in XML
Ruffnex - Di 07.02.17 11:28
Titel: Suchen und Ersetzen bei unbekannten Werten in XML
Hallo zusammen,
ich darf mich in meinem neuen Job mit C# befassen. Bin also noch ziemlich am Anfang.
Mein Problem:
Ich lade eine xml Datei und will diese durch suchen und ersetzen "umbauen". Dazu gehören Zeilen wie:
XML-Daten
1: 2: 3:
| <apiver>1.0b</apiver> <xmlver>1.0b</xmlver> <language>1</language> |
Da ich natürlich nicht weiß, ob es immer die Sprache "1" oder die Versionen "1.0b" sein werden, muss ich in der Suche hier irgendwie eine Wildcard oder ähnliches einbauen.
C#-Quelltext
1: 2: 3: 4: 5: 6:
| string eingabe, suchen, ersetzen, anzeige; eingabe = lblAnzeige.Text; suchen = "<apiver>1.0b</apiver>\n<xmlver>1.0b</xmlver>\n<language>1</language>"; ersetzen = "Hier steht ein anderer Tag"; anzeige = eingabe.Replace(suchen, ersetzen); lblAnzeige.Text = anzeige; |
\n um die Zeilenumbrüche rauszunehmen ist klar. Aber was muss ich tun, um die 1.0b durch eine RegEx z.B. zu ersetzen, damit mich das auch nicht stört, wenn zukünftig dort z.B. eine 2.0a auftaucht?
Moderiert von Th69: XML-Tags hinzugefügt
Moderiert von Th69: C#-Tags hinzugefügt
Moderiert von Th69: Topic aus C# - Die Sprache verschoben am Di 07.02.2017 um 11:25
Ruffnex - Di 07.02.17 12:45
Okay, sorry.
Und danke.
Aber das löst mein Problem nicht. Ich will keine Values verändern sondern teilweise komplette Bereiche mit unterschiedlichen Values die sich immer unterscheiden.
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| <pim_attribute> <pim_attribute_key> <![CDATA[ Merkmal ]]> </pim_attribute_key> <pim_attribute_name> <![CDATA[ Merkmal ]]> </pim_attribute_name> <pim_attribute_val> <![CDATA[ 1 ]]> </pim_attribute_val> </pim_attribute> |
Daraus muss ich nachher folgendes machen:
Hier fliegt also ein kompletter Tag raus und andere Bereiche werden ersetzt. Problem: Der Bereich pim_attribut kommt in der xml ungefähr 50 mal vor. Die Values sind also quasi vorher nicht bekannt. Somit brauche ich eben die Logik, die mir sucht nach
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| - <pim_attribute> <pim_attribute_key> <![CDATA[ --> Ersetzen durch <
- ]]> </pim_attribute_key> <pim_attribute_name> <![CDATA[ Merkmal ]]> </pim_attribute_name> <pim_attribute_val> <![CDATA[ --> Ersetzen durch ="
- ]]> </pim_attribute_val> </pim_attribute> --> Ersetzen durch "> |
Moderiert von Th69: XML-Tags hinzugefügt
jfheins - Di 07.02.17 21:12
Ruffnex hat folgendes geschrieben : |
Daraus muss ich nachher folgendes machen:
|
Das ist eh komisch, weil das kein gültiges/wohlgeformtes XML ist. Ein Element muss einen Namen haben, und kann dann noch Attribute haben.
Als Beispiel, wie das Parsen von XML geht:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| var data = XElement.Parse(@"<pim_attribute> <pim_attribute_key> <![CDATA[ Merkmal ]]> </pim_attribute_key> <pim_attribute_name> <![CDATA[ Merkmal ]]> </pim_attribute_name> <pim_attribute_val> <![CDATA[ 1 ]]> </pim_attribute_val> </pim_attribute>"); var name = data.Element("pim_attribute_name").Value.Trim(); var value = data.Element("pim_attribute_val").Value.Trim();
var newXml = new XElement(name, new XAttribute("value", value)); Console.WriteLine(newXml.ToString()); |
Gibt auf der Console folgendes aus:
Zitat: |
<Merkmal value="1" /> |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!