ERLEDIGT
NEIN
NEIN
ANTWORTEN
27
27
ZUGRIFFE
2092
2092
EMPFEHLEN
-
18.10.11 08:58 #1
- Registriert seit
- Apr 2007
- Beiträge
- 153
Hallo,
ich versuche zurzeit mit XPath und .NET bestimmte Daten aus einer XML Datei zu lesen.
Ich verwende dabei die Klasse System.Xml.XmlDocument. Ich glaube jedoch, dass ich dafür irgendwie zu blöd bin, denn wenn ich mir mit einem XPATH Ausdruck einen NodeList zurückgeben lasse, enthält diese immer 0 Elemente.
Hier mal ein Beispiel:
Code :1 2 3 4 5 6 7 8 9
<AUTOSAR ...> <ADMIN-DATA> ... </ADMIN-DATA> <TOP-LEVEL-PACKAGES> ... </TOP-LEVEL-PACKAGES> ... </AUTOSAR>
Code :1
XmlNodeList nodeList = arxmlDocument.SelectNodes("/child::TOP-LEVEL-PACKAGES");
Was mache ich falsch ?
-
18.10.11 09:12 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
Hi.
Das / ist das Dokument Element. Dieses Element hat immer genau einen Kindknoten: das Root-Element (hier AUTOSAR).
Also
oder natürlich einfachCode :1
/child::AUTOSAR/child::TOP-LEVEL-PACKAGES
GrußCode :1
/AUTOSAR/TOP-LEVEL-PACKAGES
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
18.10.11 09:16 #3
- Registriert seit
- Apr 2007
- Beiträge
- 153
Hallo,
danke für die schnelle Antwort. In der Form hatte ich es auch schon versucht, dies hatte auch 0 Elemente zurückgegeben.
Ich habe es eben auch nochmal wiederholt, wieder das gleiche ...
-
18.10.11 10:17 #4
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
18.10.11 10:20 #5
- Registriert seit
- Apr 2007
- Beiträge
- 153
Was mir auch aufgefallen ist, ist das folgendes funktioniert.
Code :1
/*
Aber folgendes nicht funktioniert.
Code :1
/AUTOSAR
-
18.10.11 10:26 #6
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
Vermutlich werden in dem XML Dokument Namensräume verwendet. Du mußt erstens einen Präfix für den Namensraum definieren und dann natürlich den Namensraum auch verwenden:
GrußCode :1
/ns:AUTOSAR
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
18.10.11 10:53 #7
- Registriert seit
- Apr 2007
- Beiträge
- 153
Hallo,
ich habe jetzt schon einiges versucht, erhalte dann aber eine Exception.
Ich habe mal einen ausgeschwarzten Root angehängt.
Code :1
<AUTOSAR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="..." xsi:schemaLocation="..." T="...">
-
18.10.11 10:58 #8
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
18.10.11 11:30 #9
- Registriert seit
- Apr 2007
- Beiträge
- 153
Also in meinem XML Dokument wird zwar ein Namensraum definiert, aber ihm wird kein Prefix zugewiesen. Ich kann also keinen Prefix in den XPath-Ausdruck einbauen.
Aber wenn ich einen XPath-Ausdruck ohne Prefix verwende, erhalte ich eine leere Menge ...
Ich weiss jetzt immernoch nicht woran es liegt. Wenn ich das Problem über Google, über das ich diesen Artikel auch schon gefunden hatte, hätte lösen können, hätte ich nicht hier gepostet ...
-
18.10.11 11:48 #10
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
Es ist völlig egal welcher Präfix im XML Dokument für einen Namensraum vereinbart wird. Vereinbare einfach einen (siehe das Codebeispiel) und verwende ihn.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
18.10.11 13:10 #11
- Registriert seit
- Apr 2007
- Beiträge
- 153
Hallo,
danke für den Hinweis.
Ich konnte es nun so lösen.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
XmlDocument arxmlDocument = new XmlDocument(); //Speicher reservieren try { arxmlDocument.Load(this.arxml); //ARXML Datei einlesen XmlNamespaceManager arxmlNamespaceManager = new XmlNamespaceManager(arxmlDocument.NameTable); string namespaceURI = arxmlDocument.DocumentElement.NamespaceURI; //Namensraum lesen arxmlNamespaceManager.AddNamespace("ns", namespaceURI); //Prefix für Namensraum festlegen XmlNodeList nodeList = arxmlDocument .SelectNodes("/ns:AUTOSAR", arxmlNamespaceManager); //Root-Knoten auswählen foreach (XmlNode node in nodeList) { System.Console.WriteLine(node.Name); //Root-Knoten über Konsole ausgeben } } catch { throw; } finally { arxmlDocument.RemoveAll(); //Speicher freigeben }
Gibt es da was auszusetzen ?Geändert von Tikonteroga (18.10.11 um 13:12 Uhr)
-
18.10.11 13:17 #12
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
Warum liest du denn den Namensraum aus dem Dokument aus?
Normalerweise sollte man doch wissen um welche Art von Dokument es sich handelt und ebenfalls den Namensraum kennen um den es geht.
So würdest du beliebige Dokumente verarbeiten, die nicht mal im entferntesten etwas mit deinem eigentlichen Zieldokument zu tun haben...
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
18.10.11 13:23 #13
- Registriert seit
- Apr 2007
- Beiträge
- 153
Hmm ich bin davon ausgegangen, dass ich die Dokumente, die ich verarbeite letztendlich vorher auf das zugehörige XML-Schema validiere.
Und wollte halt vermeiden in meinem Code zu viele String Literale zu verwenden. Da meckert glaub sonst FxCop ...
-
26.01.12 10:28 #14
- Registriert seit
- Apr 2007
- Beiträge
- 153
Hallo,
ich habe aktuell folgende Problemstellung.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
<AR-PACKAGE> <ELEMENTS> <FRAME/> <FRAME/> <FRAME/> </ELEMENTS> </AR-PACKAGE> <AR-PACKAGE> <ELEMENTS> <SYSTEM-SIGNAL/> <SYSTEM-SIGNAL/> <SYSTEM-SIGNAL/> </ELEMENTS> </AR-PACKAGE> <AR-PACKAGE> <ELEMENTS> <COMPU-METHOD/> <COMPU-METHOD/> <COMPU-METHOD/> </ELEMENTS> </AR-PACKAGE>
Ich habe als eine Sequenz der Knoten AR-PACKAGE. Jeder Knoten AR-PACKAGE enthält einen Knoten ELEMENTS. Der Knoten ELEMENTS kann entweder eine Sequenz aus FRAME, SYSTEM-SIGNAL oder COMPU-METHOD enthalten kann.
Ist es möglich über X-PATH alle Knoten mit dem Namen FRAME zu erhalten, wenn ich davon ausgehen muss dass die Reihenfolge der AR-PACKAGE Knoten zufällig sein kann oder muss ich hier alle AR-PACKAGE Knoten in einer Schleife (foreach) durchsuchen ?
-
26.01.12 11:19 #15
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
Hi.
Ich verstehe nicht wo das Problem ist.
Mitselektierst du alle FRAME Knoten (ausgehend vom Kontextknoten), die unterhalb von AR-PACKAGE und unterhalb von ELEMENTS liegen...Code :1
AR-PACKAGE/ELEMENTS/FRAME
War das deine Frage?
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
[C#] Wie kann ich auf eine Datei im Netzwerk zugreifen?
Von Tom251981 im Forum C/C++Antworten: 1Letzter Beitrag: 01.02.10, 13:58 -
C# XML datei Knoten finden per XPath
Von Heavenfighter im Forum .NET DatenverwaltungAntworten: 4Letzter Beitrag: 27.01.09, 14:22 -
von einem java Programm auf eine .jar datei zugreifen
Von Paddelente im Forum JavaAntworten: 12Letzter Beitrag: 22.04.07, 09:03 -
xsl - xpath aus xml-datei benutzen
Von Valiant im Forum XML TechnologienAntworten: 0Letzter Beitrag: 02.06.05, 20:33 -
wie kann man variablen in eine *.ini datei auslagern und mit java darauf zugreifen?
Von larss im Forum JavaAntworten: 4Letzter Beitrag: 22.04.05, 14:16





Zitieren

Login





