Xml zurück in xpath wandeln

Status
Nicht offen für weitere Antworten.

Stefanru

Mitglied
Hallo,

ich bin neu hier, habe schon überall gesucht, google, hier und was weiß ich, aber finde leider nichts.
Ich suche eine Möglichkeit ein XML Document komplett als Xpath Key / Value wiederzugeben.

Das ganze ist nötig weil ich eine Schnittstelle zwischen 2 Systemen programiere. Das eine System liefert mir eine Map mit Key / Value pairs. Der Key ist ein Xpath ausdruck. Diese Map wandle ich mit hilfe von Xpath in ein XML Document und übergebe es an das 2te System. Das klappt wunderbar.
Nun muss ich auch noch den anderen Weg implementieren, ich bekomme von System 2 ein XML Document und muss es dem 1. System als Key / Value zur verfügung stellen, wobei der Key der Xpath ausdruck sein soll.

Hat hierzu einer eine Idee? Gibt es schon etwas fertiges? Habe da nichts gefunden. Oder muss ich mir das selbst mit DOM zusammenschreiben?

Schon mal vielen Dank im Vorraus
Gruß
Stefan
 

foobar

Top Contributor
Wie du wandelst Xpath in Xml um? Mit Xpath ist eine Xml-Anwenung mit der du Knoten in einem XML-dokument selektieren kannst.
Was konvertierst du denn da und zu welchem Zweck?
 

Stefanru

Mitglied
Hi,

das ging ja schnell, danke für die Antwort.
Du hast das schon richtig gelesen ich erstelle aus XPATH Werten ein XML.
Das leistet XPATH auch, ist zwar nicht so ganz der Sinn der Sache, aber ich brauche das halt so.

Ich mach mal ein Beispiel:
Ich bekomme von System 1 eine Map mit Key / Value paaren

Key | Value
/Vertrag/Vertragsnummer | 0815
/Vertrag/Person/Vorname | Stefan
/Vertrag/Person/Nachname | Test

Nun mache ich daraus mit Xpath ein XML
das sieht dann so aus
<Vertrag>
<Vertragsnummer>0815</Vertragsnummer>
<Person>
<Vorname>Stefan</Vorname>
<Nachname>Test</Nachname>
</Person>
</Vertrag>

Dieses XML geht an System 2. Dieses Speichert und kann alles mögliche damit machen.
Wenn ich nun wieder laden will geh ich an System 2 und bekomme das XML genau so wieder zurück.
Um es nun brauchbar für System 1 zu machen muss ich aus dem XML wieder zu der Key / Value Map kommen.
Leider weiß ich nicht wie ich das hinbekommen soll. Ich bräuchte also ein XML to Xpath.
Irgendeine Idee? Oder ist sowas nur schwierig möglich? Das Problem ist ich muss das ziemlich schnell fertig bekommen. Entweder gibt es was (bezweifle ich langsam fast), ich hoffe ich kann was programieren mit DOM oder so, oder ich muss das ganze konzept nochmals überdenken für was es leider zu spät ist.

Gruß
Stefan
 

byte

Top Contributor
Sind die XPath Ausdrücke alle so einfach wie in Deinem Beispiel? Also ohne relative Achsenbezeichner oder Attribute etc.? Dann könnte man sich das ja zur Not auch fix per Hand bauen. Also Du liest die XML-Datei z.B. mit (J)DOM ein und holst Dir dann rekursiv alle Pfade und speicherst sie jeweils als Strings gemäß der XPath-Syntax. Ist etwas frickelig aber sollte eigentlich recht schnell gehen.

Du musst halt bei jedem Element gucken ob es Kinder gibt. Falls ja, kommt ein rekursiver Aufruf mit jedem Kind. So baust Du Dir alle Pfade der XML-Datei auf und kannst Deine Name-Value Paare erzeugen. Hab mal sowas ähnliches gemacht, jedoch habe ich mir da die Pfade aus einem XML-Schema geholt und bin diese dann anhand der XML-Dokumente rekursiv "abgelaufen".
 

byte

Top Contributor
Nachtrag: Es geht sogar noch einfacher sehe ich grade. Wenn Du JDOM verwendest, kannst Du getParent() auf ein Element anwenden. Das heisst, Du holst Dir erstmal alle Blätter des Baums (die XML Elemente ohne Kinder) und gehst dann einfach von hinten jeweils mit getParent() bis zum Root. Auf diese Weise kannst Du es sogar iterativ lösen, wobei die Performance bei größeren Dateien wahrscheinlich nicht so toll sein wird.
 

Stefanru

Mitglied
Danke erstmal, das hört sich gut an.
Leider hab ich bisher nur erfahrung mit Xpath, werd mich mal in JDOM einlesen.
Die Struktur des XML kann schon komplizierter werden. Also auch mit attributen und so. Denke aber erstmal würde mir so etwas wie du es beschreibst reichen. Blöd dass es da noch nix fertiges gibt.
Wie gesagt werd mich mal einlesen....

Gruß
Stefan
 

Stefanru

Mitglied
So hab mir das mal etwas angeschaut, irgendwie alles nicht so einfach.
Kannst du mir ein Beispiel geben wie das ungefähr gehen soll?
Also ich will einfach das XML Parsen und alle Key | Values auslesen. Irgendwie blick ich nicht so ganz wie ich das mit JDOM anstellen soll.
Vieleicht fehlt mir auch nur der Anfang.

Ein weiteres Problem, das sich aber sicher irgendwie beheben lässt ist das die ganze konvertiererrei in einer Oracle Datenbank stattfindet dort aber als Java. Ich denke JDOM steht da (noch) nicht zur verfügung, wird sich aber hoffentlich einbinden lassen. Zum erstellen des XML documents verwende ich folgende Libarys:

import javax.xml.parsers.DocumentBuilderFactory;

import oracle.sql.CLOB;
import oracle.xml.parser.v2.NodeFactory;
import oracle.xml.parser.v2.XMLDocument;
import oracle.xml.parser.v2.XMLElement;
import oracle.xml.parser.v2.XMLNode;
import oracle.xml.parser.v2.XMLText;
import oracle.xml.parser.v2.XSLException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

Gruß
Stefan
 

Stefanru

Mitglied
Hi, ok ich habs jetzt anders gemacht,
wegen zeitmangel usw, wandle ich nun das XML in einen String und zerlege es in Teile. Dann misbrauche den Key / Value als Container für mein zerstückeltes XML.
Dieses landet in System 1. Dort bau ich es mir wieder zusammen.

Nun will ich es wieder zurückparsen in ein XML Document um dann in System 1 das genau weiß welche werte es aus dem XML haben will mir diese per XPath zu besorgen. Leider klappt dass mim zurückwandeln in XML nicht.
Ich habe keine ahnung warum.
Das ist mein Code dazu:

theXMLString ist mein zusammengesetztes XML.

Code:
    Document theCorXml = null;
    try {
      DocumentBuilder db1= DocumentBuilderFactory.newInstance().newDocumentBuilder();
      theCorXml = db1.parse(new InputSource(new StringReader(theXMLString)));
    } catch (ParserConfigurationException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (FactoryConfigurationError e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (SAXException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

Wenn ich debuge steht danach in theCorXml [#document: null]. Das versteh ich irgendwie überhaupt nicht....

Gruß
Stefan
 

Stefanru

Mitglied
Ok, das null ist wohl normal. Ich hab das XML nun als Document.

Hab nun noch ne andere Frage aber die führt hier zu weit ich öfne ein neues Topic.

Danke erstmal.

Gruß
Stefan
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M getChildren gibt nicht alle children zurück XML & JSON 3
Kirby.exe Probleme mit XML XPATH Select XML & JSON 3
B XPath soll XML liefern XML & JSON 7
O XPATH Problem - Anfänger XML & JSON 4
M dom4j unberechtigte Invalid XPath expression XML & JSON 12
W XPath schreiben XML & JSON 1
P HTML XPath XML & JSON 1
S Ersatz für die veraltete Klasse XPath XML & JSON 1
C XPath: Alle Kinder in einer Schleife auslesen XML & JSON 2
P Xpath zugriff auf Attribute XML & JSON 3
P "XPath is deprecated" XML eclipse XML & JSON 3
G HtmlUnit XPath XML & JSON 5
D XPath-Query XML & JSON 2
I XPath Namensräume und auslesen einzelner Knoten XML & JSON 3
AMStyles XPATH Befehl SVG Java XML & JSON 2
G xpath: in Kindelement zwei Attribut-Werte auslesen XML & JSON 2
G xpath: Inhalt eines Kindelements auslesen XML & JSON 2
H ChildNode via XPath ansprechen XML & JSON 2
G JDOM - aus Children-Liste ein Child direkt ansprechen ohne XPath? XML & JSON 9
S Attribute von Elementen auslesen mit XPath XML & JSON 2
T Xpath & JDOM Element Pfad ausgeben XML & JSON 2
W XPath + Inhalt aus <td> XML & JSON 2
R XPath - frage zur Adressierung XML & JSON 3
reibi XPath XML & JSON 14
M xPath liefert leeres Nodeset XML & JSON 2
M Probleme mit XPath bei Java XML & JSON 5
W Element mit XPath @id ermitteln wenn nur ein teil der id bekannt ist XML & JSON 2
F XPath-Problem mit DOM4J XML & JSON 8
T XPath Problem: finden einer Node nach Attributswert XML & JSON 2
O XPATH gesucht XML & JSON 6
G XPATH-Frage XML & JSON 2
L Element manipulieren in einem DOMResult per XPath XML & JSON 10
P XPath und Namespaces XML & JSON 3
G XPath - replace function funktioniert nicht XML & JSON 3
E XPATH-Ausdruck mit not XML & JSON 4
E Wieso liefert dieser XPATH-Ausdruck nicht die richtige Anzahl Treffer? XML & JSON 8
M XPath Ausdruck validieren XML & JSON 2
N XPath Adressierung XML & JSON 7
F XPath frage XML & JSON 4
B Optionaler XPath pfad XML & JSON 2
B XPath frage XML & JSON 2
T Frage zu XQuery (XQJ) / XPath XML & JSON 2
P XPath Problem XML & JSON 2
S Problem mit XPath XML & JSON 4
T Mit XPATH finden und dann änder XML & JSON 2
T EXSD auslesen mit XPath und JDOM XML & JSON 8
G XPath gesucht für Tag mit konkretem Content XML & JSON 2
A XPath Problem XML & JSON 2
C XPath in JDOM klappt nicht XML & JSON 2
T Prbolem XPath XML & JSON 2
X Xpath, alle Element die mit "user" beginnen auswäh XML & JSON 2
loadbrain XPath Problem XML & JSON 2
M brauche große XML-Datei für XPath-Tests XML & JSON 4
M JDOM und XPath, zu Element zugehörigen XPath-Ausdruck XML & JSON 5
F JDOM und XPath - Problem mit Namespace ohne Prefix XML & JSON 5
F hilfe bei xpath-ausdruck XML & JSON 2
K java + xpath -> performanceproblem XML & JSON 9
H Xpath kindelemente auslesen XML & JSON 2
G Frage zu XPath XML & JSON 2
flashfactor Filtern mittels XPATH XML & JSON 4
M XSL/XPath - Nur ersten Wert mit selben Attribut XML & JSON 4
M XPath Problem im Zusammenhang mit document() XML & JSON 2
M Frag zu xsl:when beziehungsweise XPath XML & JSON 3
F JDom und XPath XML & JSON 12
C xpath funktioniert nicht XML & JSON 5
M XPATH und RSS (Problem namespaces) XML & JSON 7
P nochmal XPath :-) XML & JSON 22
P XPath . XML & JSON 2
T Rekursiver Verzeichniss Baum in XML & XPath XML & JSON 4
clemson xpath mit jdom XML & JSON 2
Wildcard xpath Parser XML & JSON 8

Ähnliche Java Themen

Neue Themen


Oben