Wczytywanie krótkiego xmla

0

Witam.

Mam wygenerowanego prostego xmla z ścieżkami:

<?xml version="1.0" encoding="utf-8"?>
<settings>
  <source>H:\Źródło</source>
  <target>H:\Cel</target>
</settings>

Potrzebuje adres z source i target wczytać jak najprościej do zmiennych sourcepath i targetpath.

Jak to zrobić? Próbowałem wielu metod wyszukanych w googlach i żadna nie przynosi oczekiwanych efektów.

0

Naprawdę żadna? A jaki jest oczekiwany rezultat i co się dzieje, że go nie ma? ;)

Jeden z pierwszych wyników z google:
http://stackoverflow.com/questions/4752796/how-to-read-xml-in-net

0

To że z tego tematu też korzystałem i za każdym razem nie wczytuje, tj. po wczytaniu xmla i przypisaniu wartości do zmiennych są one puste.

Oczekiwany rezultat to taki bym widział w debugerze że w zmiennych ścieżki są prawidłowo wpisane.

1

Żeby nie być gołosłownym - patrz:

using System;
using System.Xml;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
           String xmlstring = "<?xml version=\"1.0\" encoding=\"utf-8\"?> <settings> <source>H:\\Źródło</source> <target>H:\\Cel</target> </settings>";
            
           XmlDocument doc = new XmlDocument();
            doc.LoadXml(xmlstring);
            
            XmlNode sourceNode = doc.DocumentElement.SelectSingleNode("/settings/source");
            string source = sourceNode.InnerText;
            Console.WriteLine(source);
            
            XmlNode targetNode = doc.DocumentElement.SelectSingleNode("/settings/target");
            string target = targetNode.InnerText;
            Console.WriteLine(target);
        }
    }
}

+wynik kompilacji online (wszystko jest jak trzeba):
http://rextester.com/YXXD91099

EDIT: probowałeś zmienić ścieżki z \ na / ? ;)

0

Oto komunikat błędu przy tym rozwiązaniu:

An unhandled exception of type 'System.Xml.XmlException' occurred in System.Xml.dll

Additional information: Dane na poziomie głównym są nieprawidłowe. wiersz 1, pozycja 1.

A oto kawałek kodu

            XmlDocument settings_load = new XmlDocument();
            settings_load.LoadXml("settings.xml");
            XmlNode sourceNode = settings_load.DocumentElement.SelectSingleNode("/settings/source");
            XmlNode targetNode = settings_load.DocumentElement.SelectSingleNode("/settings/source");
            _settings.textBox1.Text = sourceNode.Value;
            _settings.textBox2.Text = targetNode.Value; 

Druga linijka posiada ten błąd.

0

Ścieżki zamień na linuxowy /, bo xml pewnie traktuje \ jako escaping.
Edytowałem już posta - poza tym jak mówiłem - kod działa.

I w sumie to czemu value a nie InnerText?

0

Ale w którym miejscu bo wszędzie widzę że mam tak jak ty / i \

0

To trzeba zmienić też sposób zapisu w takim przypadku ... i czy ten program będzie tą ścieżkę odczytywał poprawnie do wykonania powyższych zadanń (komentarz mój)?

0

Tak. Windows potrafi czytać ścieżki w formacie C:\windows\blabla, jak również C:/windows/blabla. Natomiast wiele narzędzi po prostu lepiej działa ze standardowym / slashem niż z backslashem.

A przy okazji - pomogło? ;)

0

Edycja xml i zmiana znaku z \ na / i // nie przynosi efektu. Ten sam błąd w tej linijce:

settings_load.LoadXml("settings.xml");

Gdy zamienie na:

settings_load.Load("settings.xml");

problem znika, ale nie wczytuje mi właśnie niczego z xmla do programu

0

Czy ten plik istnieje takiej lokalizacji: bin/Debug/settings.xml ?

0

@yardi1993
Sihox już pisał:

settings_load.LoadXml(...); //jako argument przyjmuje Stringa z zawartością xml
settings_load.Load(..); // tutaj przyjmuje ścieżkę do pliku

Co do kodu... Plik jest ok, kod jest ok. Sprawdź, czy plik masz w dobrym miejscu/podaj ścieżkę do niego. Na razie nie mam tego jak sprawdzić.

0

Dobra, udało mi się poskładać to do kupy i działa. Dziękuję bardzo za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1