Autor Beitrag
Andreaz
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 09.03.11 14:30 
Hallo,

habe Probleme beim EInlesen von Inhalten einer XML-Datei:
Befindet sich in der XML-Datei kein Namespace, so funktioniert folgender C# Code einwandfrei.
Doch sobald ein Namespace eingefügt wird, wird die foreach-Schleife komplett uebersprungen. Das Problem ist, der Namespace in der XML-Datei keine Prefix hat. Im C# Code arbeite ich mit dem XMLNamespaceManager. Dabei ueberschreibe ich den Default-Namespace im XMLNamespaceManager. Nur leider werden meine Ausgaben nicht ausgeführt. Habe versucht, den xmlns-Namespace im XMLNamespaceManager zu überschreiben, nur leider ist das nicht möglich.
Wenn ich in meiner XML-Datei ein Namespace mit einem Präfix habe, und ein Tag dieses Präfix besitzt, werden die Ausgaben korrekt ausgeführt.

Das Problem ist, dass in meiner XML-Datei ein Namespace ohne Präfix vorhanden ist und somit der Standard-Namespace ueberschrieben wird. Kann ich den Standard-Namespace im XMLNamespaceManager irgendwie ändern?

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
XmlDocument data = new XmlDocument();
data.Load(file);

XmlNamespaceManager ns = new XmlNamespaceManager(data.NameTable);
ns.AddNamespace("", data.DocumentElement.NamespaceURI);

foreach (XmlNode node in data.SelectNodes("screen/channels/channel", ns))
{
     Console.WriteLine(node.Attributes["id"].Value);
     Console.WriteLine(node.SelectSingleNode("Author").InnerText.ToString());
}


ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<screen xmlns='http://www.st.de/' >
<channels>
    <channel id='2207' serial='201103041435' >
       <description>Test1</description>
    </channel>
    <channel id='2201' serial='201103041435' >
       <description>Test2</description>
    </channel>
    <channel id='2202' serial='201103041405' >
      <description>Test3</description>
    </channel>
  </channels>
</screen>
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 09.03.11 15:31 
:welcome: in der EE!

XML kennt Default Namespaces, XPath kennt keine, also benenne ihn einfach ;) :
ausblenden C#-Quelltext
1:
2:
3:
ns.AddNamespace("x", data.DocumentElement.NamespaceURI);

foreach (XmlNode node in data.SelectNodes("x:screen/x:channels/x:channel", ns)) ...

_________________
>λ=

Für diesen Beitrag haben gedankt: Andreaz