kostenloser Webspace werbefrei: lima-city


C# XML-Reader funktioniert nicht richtig

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    mifa

    Kostenloser Webspace von mifa

    mifa hat kostenlosen Webspace.

    Ich habe im Rahmen eines kleinen Projekts ein Programm das u.a. XML-Dokumente ausliest.
    Nun habe ich folgenden Code:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml;
    using System.Xml.XPath;
    
    namespace XXXX
    {
        public partial class frmMain : Form
        {
            public frmMain()
            {
                InitializeComponent();
                
            }
    
            private void öffnenToolStripMenuItem_Click(object sender, EventArgs e)
            {
                ofdDIALOG.ShowDialog(); //open-file-dialog der aufgeht 
                XmlReaderSettings myset = new XmlReaderSettings(); 
                myset.ConformanceLevel = ConformanceLevel.Fragment;
                XmlReader xr = XmlReader.Create(ofdDIALOG.ToString(), myset); //Einlesen des XML-Dokuments, der Pfad wird auch korrekt übergeben
            }
        }

    Das Problem ist, dass trotz korrekter Pfadübergabe der Fehler: Unbekanntes URI-Präfix
    kommt
    Wenn ich mir die Argumente der Funktion anschaue steht bei File_exist = true , also hat er auch die Datei.
    Wenn ich jedoch den üblichen Speicherort für Dokumente nehme (bin\Debug) also bei folgendem Code:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml;
    using System.Xml.XPath;
    
    namespace XXXX
    {
        public partial class frmMain : Form
        {
            public frmMain()
            {
                InitializeComponent();
                
            }
    
            private void öffnenToolStripMenuItem_Click(object sender, EventArgs e)
            {
    
                XmlReaderSettings myset = new XmlReaderSettings();
                myset.ConformanceLevel = ConformanceLevel.Fragment;
                XmlReader xr = XmlReader.Create(Environment.CurrentDirectory + "\\xml.xml", myset); // Debug\bin + Datei
               
            }
        }
    }


    das ganze funktioniert. Ich bin echt ratlos.



    Beitrag zuletzt geändert: 3.12.2009 20:03:40 von mifa
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo mifa,

    beim Erzeugen der XMLReader-Instanz übergibst Du in der Create()-Anweisung keinen Pfad. Anstatt des Pfads zur XML-Datei übergibst Du einen Objektstring, der Deinen OpenFileDialog repräsentiert.

    Funktionieren würde es z.B. so:
    XmlReader xr = XmlReader.Create(ofdDIALOG.FileName, myset);

    Gruß,
    twd
  4. Hallo mifa,

    wenn es nur darum geht Daten aus einem XML-Dokument zu lesen, dann verwende doch einfach den XmlTextReader.
    Dieser akzeptiert beim Instanziieren auch deinen Pfad.

    Müssten dann so aussehen:
    XmlTextReader xr = new XmlTextReader("Pfad");

    dann noch ne While-Schleife zum Auslesen und ggf. die Daten in den passenden Typ zur weiterverarbeitung umwandeln.
    Außerdem würde ich das Resultat deines Openfile-Dialogs in eine Variable vom Typ DialogResult speichern und dann nochmals prüfen ob dein Dialog auch mit "OK" geöffnet wurde, da ansonsten auch jeder String der im Textfeld bereits eingeben wurde an deinen Reader übergeben wurde.
    Also sowas in der Art.:

    DialogResult diagRes = ofdDIALOG.ShowDialog(this);
    if (diagRes == DialogResult.OK || diagRes == DialogResult.YES)
    {
        //hier nun deinen xml-reader
        XmlTextReader xr = new XmlTextReader(diagRes.FileName.ToString());
    
       //Variable für den gelesenen XML-Inhalt
       string xmlContent = ""
       //Lese-Schleife
       while (xr.Read())
       {
            if (xr.NodeType == XmlNodeType.Element)
            {
                 //Element in die Variable schreiben...
                 xmlContent += "<" + xr.Name + ">\n";
             }
            if(xr.NodeType == XmlNodeType.Text
            {
                 //Wert in die Variable schreiben...
                xmlContent += xr.Value + "\n";
            }
        }
    }


    Soll nur als Beispiel dienen, und ich habe es auch nicht vorher getestet, also keine garantie auf Richtigkeit, aber ich hoffe ich konnte vielleicht trotzdem etwas weiter helfen.
    mfg,
    ab
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!