XPathSelectElement unter XDocument steht nicht als erweiterte Methode zur Verfügung obwohl using System.Xml.Xpath; implementiert ist

  • C#

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von BHensch.

    XPathSelectElement unter XDocument steht nicht als erweiterte Methode zur Verfügung obwohl using System.Xml.Xpath; implementiert ist

    Hey liebe VB Gemeinde,

    Ich hoffe ihr könnt mir mit Rat auf die Sprünge helfen. Derzeit lerne ich C# in Verbindung mit Xamarin und bin also sicher dass der Fehler auf eine falsche Implementierung meinerseits zurückzuführen ist. Mein Allgemeines Ziel ist XML Antworten zu interpretieren und mir aufbereitet zur Verfügung zu stellen. Dazu verwende ich die Klasse XDocument, welche auch fleißig ihren Dienst absolviert. Nun möchte ich ein bestimmtes Element aus der XML Struktur mopsen und dazu soll XPath extrem komfortabel sein. Der Schnipsel um den es geht ist der hier:

    Quellcode

    1. XmlNamespaceManager oXMLNameSpaceTable = new XmlNamespaceManager(new NameTable());
    2. oXMLNameSpaceTable.AddNamespace("ns1", this.BaseURL);
    3. XElement oXMLElement = this.oResponse.XPathSelectElement(String.Format("//ns1:" + sMethodName + "Result", oXMLNameSpaceTable));


    Die Klassen internen Variablen this.oResponse und this.BaseURL sind gesetzt und this.Response ist auch ein Objekt von XDocument. Jedoch meint VS dass die Methode XPathSelectElement nicht im Kontext von XDocument zur Verfügung steht.

    Ich habe schon unter "Verweise", System.XML.XPath ebenfalls eingebunden. Am Anfang der Datei habe ich diese using Direktiven implementiert:

    Quellcode

    1. using System;
    2. using System.Text;
    3. using System.Threading;
    4. using System.Net;
    5. using System.IO;
    6. using System.Diagnostics;
    7. using System.Linq;
    8. using System.Xml;
    9. using System.Xml.Linq;
    10. using System.Xml.XPath;
    11. using System.Dynamic;
    12. using System.Collections.Generic;
    13. using System.Text.RegularExpressions;


    Visual Studio graut ja die Direktiven aus, wenn es der Meinung ist, dass diese unnötig wären, wenn diese nicht im Quelltext verwendet werden. Das stimmt aber im Fall von using System.Xml.XPath nicht. X/

    Ich stelle mich sprichwörtlich zu blöd an ?( zu verstehen warum VS den implementierten Namespace nicht verwenden will / kann. Irgendetwas fehlt, denn alles was ich zum Thema im Netz gelesen habe beschreibt, using System.Xml.XPath am Anfang der Datei und du bist glücklich. Ich würde das auch gerne sein, aber derzeit komme ich nicht weiter... ;(

    Ich hoffe eine(r) von euch kann mir helfen das Rätsel um XPathSelectElement zu lösen und ich wäre sehr dankbar für eure Hilfe... :thumbsup:

    Vielen lieben Dank im Voraus, Ben
    @BHensch Welches Framework verwendest Du?
    Welches Framework erwartet dieser Befehl bzw. ab welchem Framework steht dieser Befehl zur Verfügung?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    BHensch schrieb:

    dass ist nicht die Antwort auf deine Frage
    Korekt.
    Geh mal in die Projekteigenschaften:

    und dann bemühst Du mal via Google die MSDN: MSDN XDocument XPathSelectElement
    Da findest Du die Voraussetzungen.
    Überzeuge Dich davon, dass der Befehl richtig geschrieben ist.
    =====
    Jou, da stimmt was nicht. Das Ding kommt bei mir auch nicht. :/
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hmm - ich kanns nicht nachvollziehen - mein Test kompiliert:

    C#-Quellcode

    1. using System.Xml;
    2. using System.Xml.Linq;
    3. using System.Xml.XPath;
    4. namespace PersonListboxBehaviorTester {
    5. public partial class MainWindow : Window {
    6. private static void Test() {
    7. XmlNamespaceManager oXMLNameSpaceTable = new XmlNamespaceManager(new NameTable());
    8. var oResponse=default(XDocument);
    9. oXMLNameSpaceTable.AddNamespace("ns1", "this.BaseURL");
    10. XElement oXMLElement = oResponse.XPathSelectElement(String.Format("//ns1:" + "sMethodName" + "Result", oXMLNameSpaceTable));
    11. }
    VS2013
    Folglich liegt der Fehler irgendwo in etwas, was du nicht gezeigt hast.
    Vielleicht hast du auch zu viele Usings, und es kommt zu einem Namenskonflikt. Also dass der Compiler unter XDocument/XNode was anneres versteht als du denkst.
    @ErfinderDesRades
    Ich habs versucht aufzuklären.
    Bei mir fehlte using System.Xml.XPath;, das wird von der IDE leider nicht angeboten. ;(
    Allerdings steht es in der MSDN.
    Mit

    C#-Quellcode

    1. using System.Xml.Linq;
    2. using System.Xml.XPath;
    schnuckelt das.
    Soweit zu meinem Test.
    Bei @BHensch sind aber diese usings drinne, das verwundert mich sehr, dass es da nich flutscht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hey Leute, erstmal vielen Dank für die vielen Postings, mega...

    also im Anhang mal ein paar Screenshots:

    Zum Einen verwende ich .Net Framework 4.5


    Ich musste unter Verweise, den XPath hinzufügen, wohlmöglich ist das ein Hinweis:
    Erst dann hatte er den XPath als Direktive angenommen.


    Leute ich find es richtig stark von euch und ich möchte mich nochmal herzlichst bedanken für die vielen Antworten...

    LG Ben
    Bilder
    • screen.png

      8,55 kB, 503×261, 97 mal angesehen
    • screen02.png

      18,11 kB, 330×467, 103 mal angesehen
    @BHensch Kann sein, dass das mit dem Xamarin zusammenhängt, das hab ich nicht, und ich denke mal, der @ErfinderDesRades auch nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    BHensch schrieb:

    Ich musste unter Verweise, den XPath hinzufügen, wohlmöglich ist das ein Hinweis:
    Erst dann hatte er den XPath als Direktive angenommen.
    Ja, das ist logisch: Solange auf die dll nicht verwiesen wird, ist der darin befindliche Code für den Compiler nichtexistent - daran ändert auch eine Using-Direktive nix - die bindet dann quasi einen Namensraum ein, in dem aber nix zu finden ist.

    Übrigens würde ich dir gerne den ObjectBrowser empfehlen. Der hat eine Suche-Funktion, und dadurch wärst du höchstwahrscheinlich sehr schnell drauf gekommen, dass deiner Projektmappe die Xpath-Dll garnet bekannt ist.

    Tut dazu: VisualStudio richtig nutzen (Google ist nicht deine Mami)
    Bilder
    • XDocument.png

      20,99 kB, 374×565, 95 mal angesehen
    • System.Xml.XPath.Extensions.png

      25,73 kB, 684×353, 101 mal angesehen
    • XDoc-ClassHierarchy.png

      7,22 kB, 199×272, 84 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Hallo zurück und ersteinmal allen einen schönen Montag gewünscht.

    @ErfinderDesRades Da kann ich ehrlicherweise nur anworten, 90% der Fehler sitzen vor dem Display :whistling: Ich habe über den ObjektBrowser den Namespace in Verweise übernommen, aber nur den Namespace anscheinend. Ich melde mich heute Nachmittag nochmal und halte euch auf den Laufenden..

    LG Ben

    BHensch schrieb:

    Ich habe über den ObjektBrowser den Namespace in Verweise übernommen
    Bitte!
    Verwende Begriffe sinnvoll und richtig.
    "Über den ObjectBrowser Namespaces in Verweise übernehmen" ist gänzlich wirrer Unsinn, und deutet nur darauf hin, dass dir keiner der 3 Begriffe wirklich etwas sagt.

    Sorry - klingt natürlich arrogant, aber ich meins als Empfehlung, dass du dich schlau machst, was diese 3 Begriffe wirklich bedeuten - jeder von dene ist nämlich sehr wichtig.
    @ErfinderDesRades Alles Gut, recht hast du :D Ja mir leuchtet nun auch ein, dass das eigentliche Problem, die Versionsnummer sein wird. Im Objektkatalog steht mir das XPath ab Framework Version 4.5 gar nicht mehr zur Verfügung. Ich kann im Objektkatalog unter 2017 hinter jedem Namespace die Version in eckigen Klammern sehen. Da, das Projekt jedoch in 4.5 angelegt wurde, geht es anscheinend nicht.

    Somit ist die einzige Lösung ein neues Projekt mit .NET 3.5 anzulegen, wenn ich die Funktion nutzen will, richtig?

    Oder bin ich da wieder auf dem Holzweg?

    LG Ben
    Bilder
    • screen03.png

      71,56 kB, 1.201×679, 89 mal angesehen
    Hey Leute ertsmal nochmal vielen Dank für alle Antworten,

    des Rätselslösung liegt an Xamarin.Forms, ich hatte zum Test ein neues Projekt mit .NET 3.5 + Xamarin.Forms erstellt, die Datei ins Projekt hinzugefügt, selber Fehler :cursing:

    Folglich erstellte ich zum Spaß, wieder ein neues .NET 3.5 plattform unabhängiges Projekt mit dem Unterschied, dass ich statt Xamarin.Forms, Nativ ausgewählt habe. Datei wieder hinzugefügt und siehe da die Funktionen waren zu sehen, mit dem netten kleinen Hinweis, dass die Methode unter iOS nicht geht.

    LG Ben
    Bilder
    • screen04.png

      18,82 kB, 671×162, 100 mal angesehen