2016-05-26 16 views
1

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.

+0

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

+0

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

+0

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

Antwort

0

Versuchen ' in Ihrem XPath-Bindungs ​​Parameter wie folgt zu entkommen:

XPath=//item[not(item) and contains(name, \'kidney\')]//ancestor::item 

ähnliches Problem: Error in XPath binding in XAML

+0

Hallo und danke - Ich habe das schon ohne Erfolg ausprobiert (eigentlich glaube ich, basierend auf dem Problem, das du verlinkt hast) – woody

+0

immer noch die gleichen Fehlermeldungen? – har07

+0

Ich glaube schon, werde das aber später nochmal überprüfen, danke nochmal. – woody