etwas nicht mit diesem Code für mich klicken:Kann nicht Elemente finden genannt
var cfgDoc = XElement.Load(_cfgFile);
foreach (var x in cfgDoc.Elements("property"))
{
Console.WriteLine(x);
}
I zur Ausgabe nur Knoten in der Lage sein erwarte, dass property
genannt werden, aber Zilch bekommen. Wenn ich den Parameter XName verlasse, erhalte ich das Dokument (unten), das zeigt, dass es zumindest korrekt geladen wird.
Was fehlt mir?
<session-factory xmlns="urn:nhibernate-configuration-2.2">
<property name="connection.release_mode">on_close</property>
<property name="show_sql">true</property>
</session-factory>
2. versuchen
var cfgDoc = XElement.Load(_cfgFile);
XNamespace ns = "urn:nhibernate-configuration-2.2";
var properties = cfgDoc.Elements(ns + "property");
Assert.That(properties.Count() > 0);
foreach (var x in cfgDoc.Elements(ns + "property"))
{
Console.WriteLine(x);
}
Ich wollte das vorschlagen, also erkläre ich, warum das einen Unterschied machen würde. Wenn Sie nur XElement.Load ausführen, stellt die zurückgegebene Variable den Stammknoten dar, der sich vom Stammelement unterscheidet. In Ihrer Beispieldatei ist 'session-factory' das Wurzelelement. Der Wurzelknoten ist ein abstraktes Konzept, das die Gesamtheit des Dokuments darstellt und als übergeordnetes Element des Stammelements ('session-factory') betrachtet wird. Um vom Wurzelknoten zu den 'property'-Elementen zu kommen, müssen Sie zuerst' session-factory' durchlaufen. – Simon
Descendants funktioniert. XDoc.Load(). Root tut das nicht. – Berryl
Nun, Root funktioniert auch, aber nur mit Descendents soweit ich sehen kann. Nahe genug, um die Antwort auf das zu sein, was ich gefragt habe! Prost – Berryl