Diverse XMLNS ohne Präfix nutzen

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Somero.

    Diverse XMLNS ohne Präfix nutzen

    Hallo Zusammen,

    bin gerade am erweitern meines Programmes. Aktuell kann mein Programm eine Version von XML-Dateien einlesen, welche von einem anderen Programm erstellt werden.

    Der Namespace welchen ich für LINQ to XML importiere befindet sich natürlich in meiner obersten Zeile und beinhaltet einen Namespace ohne Präfix. Das Problem ist wähle ich nun eine ältere oder neuere Version des XMLs so hab ich auch ein anderen XMLNS im XML-Dokument angegeben und mein LINQ to XML streikt. Gibt es eine Möglichkeit mehrere Namespaces zu importieren, wenn ich zwei ohne Präfix nehme geht das ja nicht. Oder gibt es eine Möglichkeit den Namespace erst nach auslesen durch z.B. einen XMLDataReader dynamisch zu importieren? Für kreative Ideen wär ich dankbar.

    Viele Grüße & Vielen Dank im Voraus

    Somero
    Wenn Du die XML-Version am Inhalt des Files ausliest, kannst Du per System.IO ein paar Zeilen auslesen, die Version erkennen und dann für jede Version eine separate Klasse instanziieren, die z.B. von einer genmeinsamen Basisklasse abgeleitet sind.
    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!
    Also den jeweiligen XMLNS kann ich jetzt, bevor ich irgendetwas importieren muss, auslesen und verarbeiten. Allerdings würde ich gerne auf das Imports <xmlns="..."> verzichten.

    Kann ich per XNamespace.Get oder ähnlichem auch den o.g. Namespace zuweisen statt oben importieren ? Das bräuchte ich nämlich.

    Wissen meine XElement, XAttribute, ... dann auch das Sie den über XNamespace.Get erhalten haben oder muss ich ihnen noch was dazugeben wie ns + XElement?

    Ich habe es nämlich so probiert:

    VB.NET-Quellcode

    1. Dim ns As XNamespace = XNamespace.Get(MainForm.XMLNS)
    2. Dim Elements As IEnumerable(Of XElement) = archiveElement.<E>


    und das tut nicht dann kann er mir meine Elements nicht auslesen. ;(