[C#] verschiedene XML Formate beliebig verwenden

Blackhawk50000

Erfahrenes Mitglied
Hallo,
ich habe schon ne Wweile gegooglet und auch schon ne Weile hier im Forum gesucht.

meine Frage:

mir liegt folgende XML Datei vor:

HTML:
  <configuration>
	<system.runtime.remoting>
		<application>
			<lifetime leaseManagerPollTime="1M" />
			
			<channels>
				<channel
					MaxQueuedItems="10000"
					MaxTotalSize="10000000"
					port="8737" />
				<channel ref="tcp" port="0">
					<clientProviders>
						<formatter ref="binary"/>
					</clientProviders>
					<serverProviders>
						<formatter ref="binary" typeFilterLevel="Full" />
					</serverProviders>
				</channel>
			</channels>
		</application>
	</system.runtime.remoting>
	<appSettings>
		<Film> MUC </Film>
		<add key="LoginMask"  value="LL0000" />
    	</appSettings>
</configuration>

An den Tag AppSettings komme ich mit diesem Code:

Code:
public string ReadValue(string tag, string key)
        {
            string _file = "PTSE.exe.config";
            string _path = @"C:\Dokumente und Einstellungen\User\Desktop\";
            FileStream stream = new FileStream(_path +_file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            XmlDocument doc = new XmlDocument();
            doc.Load(stream);
            string returnValue = string.Empty;
            XmlNodeList nodeList = doc.GetElementsByTagName(tag);
            for (int i = 0; i < nodeList.Count; i++)
            {
                for (int j = 0; j < nodeList[i].ChildNodes.Count; j++)
                {
                    if (nodeList[i].ChildNodes[j].Name == key)
                    {
                        returnValue = nodeList[i].ChildNodes[j].Value;
                        break;
                    }
                }
            }
            return returnValue;
        }

Aber wie komme ich an andere Knoten? Die muss ich da vor gehen? Leider habe ich keinerlei Ahnung von XML und nur sehr wenig zeit.... (bis morgen)

Das Ergebniss soll sein, dass ich alle Werte auslese die wichtig sind, sie in Textboxen auf der WindowsForm schreibe und sie bearbeitbar mache... wenn sie bearbeitet wurden, sollen sie wieder ins XML Document geschrieben werden.

System.Configuration könnte bei dieser Datei gehen..... bringt aber nichts, da ich auch andere nicht config-Dateien auf die gleiche weise behandeln muss

Ich hoffe ihr könnt mir etwas helfen =)

Tausend Dank im Vorraus
 
Die frage dürftest du schon verstahden haben... ich bräusche eben nur 2 code beispiele, die ich nirgendwo finde, und ich habe leider nicht die zeit, mir ALLE XML-Reader-, Whriter oder was es da sonst noch gibt.... durchzulesen.... eventuell zu übersetzten

Diese seite habe ich mir schon durchgelesen klar.... da bin ich auch drauf gestoßen, aber daraus werde ich in so fern nicht schlau, dass da nicht genau DAS gezeigt wird, was ich einmal brauche.
Es ich muss es nur EINMAL gesehen haben ums zu verstehen, aber es ist schwer das richtige zu finden....

ich weiß wie ich an MUC ran komme wenn <film> MUC </film> dasteht.
ich weiß aber nicht, wie ich an MUC ran komme wenn da steht <add key="film" value="MUC" />
und ich wiß auch nicht wie ich an die portnummer 8737 ran komme.

mehr möchte ich garnicht wissen, darauf kann ich aufbauen, da das die 3 xml schemen sind, die ich verwenden muss.
wenn ich das bis morgen fertig habe, habe ich mehr zeit mich genauer damit zu beschäftigen

es tut mir wirklich leid für meine aufdringlichkeit (so fern es so wirkt) und/oder begriffsstutzigkeit. :( :confused:
 
Wenn du MUC aus
XML:
<add key="film" value="MUC" />
auslesen willst, dann heißt das Stichwort hier "Attribut". Also "value" ist ein Attribut von "add" und hat den Wert "MUC".
Hab das noch nie gemacht, aber das Auslesen sollte mit der MoveToAttribute-Methode der XmlReader-Klasse gehen.
 
Zuletzt bearbeitet von einem Moderator:
So hallo,

ich bin nun ein ganzes stück weiter gekommen, und schaffe es, mit Hilfe von diesem Code:

Code:
private string SearchNodeValue(string node = "/configuration/appSettings/add[@key='film']");
{
       xmlNode _XNValue = doc.SelectSingleNode(node)
      if (_XNValue != null)
      {
            _returnvalue = _XNValue.Attributees["value"].Value;
      }

}

an [film] MUC [film] zu kommen.....

mizt hilfe diesers Codes, kann ich meine werte auch ganz ganz einfach bearbeiten.

jetzt fehlt nur noch eine einzige Sache.

wie komme ich an diesen ConnectionString?:

HTML:
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
	<session-factory name="System">		
		<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
		<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
		<property name="connection.connection_string">ConnectionString</property>
		<property name="show_sql">false</property>
		<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>		
		<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
	</session-factory>
</hibernate-configuration>
 
Zuletzt bearbeitet:
Hallo.

um z.B. an den connection.provider zu kommen, sollte folgendes funktionieren:
C#:
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load("file.xml");

XmlNamespaceManager nsman = new XmlNamespaceManager(xmldoc.NameTable);
nsman.AddNamespace("ns", "urn:nhibernate-configuration-2.2");

XmlNode xmlnode = xmldoc.SelectSingleNode("//ns:session-factory/ns:property[@ns:name='connection.provider']", nsman);
Gruß
MCoder
 
okay super danke, das werde ich gleich ausprobieren =)

aber wie sieht das aus, wenn ich die eigenschaft ändern will und diese datei speichern will?
 
Erstmal den XmlNode wie schon beschrieben suchen und dann die Eigenschaft ändern:
C#:
XmlAttribute attr = (XmlAttribute)xmlnode.Attributes.GetNamedItem("connection.provider");
attr.value = "irgendwas";
xmldoc.Save("file.xml");
Gruß
MCoder
 
Hallo, ich muss doch nochmal nachfragen

was ich auch mache, aber bei deinem Code bekomme ich immer null raus....

Code:
private void ReadHibernate(string _FileName)
        {
            FileStream stream = new FileStream(_FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            HibernateDoc.Load(stream);

            string ConnectionString = SearchNodeValue("session-factory", "property", "connection.connection_string");
        }



private string SearchNodeValue(string _Node1, string _Node2, string _ValueName)
        {
            XmlNamespaceManager xnsm = new XmlNamespaceManager(HibernateDoc.NameTable);
            xnsm.AddNamespace("ns", "urn:nhibernate-configuration-2.2");
            XmlNode xmlnode = HibernateDoc.SelectSingleNode("//ns:" + _Node1 + "/ns:" + _Node2 + "[@ns:name='" + _ValueName + "']", xnsm);
            //XmlAttribute attr = (XmlAttribute)xmlnode.Attributes.GetNamedItem("connection.provider");
            return null;
        }
 
was ich auch mache, aber bei deinem Code bekomme ich immer null raus....
Sorry, ein Fehler im XPath-String. So sollte der XmlNode aber gefunden werden (das "ns:" vor der Property muss weg):
C#:
XmlNode xmlnode = xmldoc.SelectSingleNode("//ns:session-factory/ns:property[@name='connection.provider']", nsman);
Gruß
MCoder
 

Neue Beiträge

Zurück