Ich versuche, eine WPF-Strukturansicht basierend auf der Ausgabe von einer Xpath-Abfrage zu erstellen. Die Idee ist, dass basierend auf einer Suchzeichenfolge eine Baumansicht präsentiert wird, die eine kleine Teilmenge eines sehr großen XML-Dokuments darstellt. WPF und XPath sind völlig neu für mich (einige Wochen) also möglicherweise eine dumme Frage ...WPF-Strukturansicht an verschachtelten X-Pfad binden mit enthält Filter
In einer Konsolenanwendung funktioniert das gut und gibt genau das, was ich als Basis für den Baum möchte.
XmlNodeList nodeList = root.SelectNodes("//item[not (item) and contains(name, 'kidney')]//ancestor::item");
foreach (XmlNode node in nodeList)
{
file.WriteLine($"{node.ChildNodes[0].InnerText}");
//Console.WriteLine($"{node.Name} - {node.InnerText}");
}
Allerdings, wenn ich die gleiche XPath in einer Bindung wie folgt verwenden:
ItemsSource="{Binding Source={StaticResource xmlDataProvider}, XPath=//item[not (item) and contains(name, 'kidney')]//ancestor::item}"
ich ein Bündel oder Fehler rund um den Bau des XPath-Stück erhalten (XPath =/* funktioniert gut). Ich dachte, es könnten die einfachen Anführungszeichen sein, aber das Ersetzen durch das XML-Sonderzeichen oder das Entkommen mit \ macht keinen Unterschied. An dieser Stelle frage ich mich, ob verschachtelte Xpath-Anweisungen überhaupt verwendet werden können.
es die einfache Weise tun. Verwenden Sie nicht bind, sondern fügen Sie die Elemente nur in einer Baumansicht hinzu. Verwenden Sie Ihren Konsolencode, aber statt WriteLine() Strings zu einer Baumansicht hinzuzufügen. – jdweng
Ah ... Alle Beispiele, die ich angeschaut habe, verwenden Bindung im XAML. Wenn ich Sie verstehe, kann die Baumansicht in C# -Code verwaltet werden? Das würde mir viel besser passen, also werde ich das recherchieren. Danke vielmals. – woody
Siehe folgende Webseite: http://stackoverflow.com/questions/28976601/recursion-parsing-xml-file-with-attributes-into-treeview-c-sharp. Der Code legt eine vollständige XML-Datei rekursiv in eine Strukturansicht, aber Sie können den Code nach Bedarf ändern. – jdweng