XML/XPath: Unterschiedliche Schreibweisen von Tags
Hallo zusammen,
ich habe das Problem, dass ich in einer XPath-Abfrage (eXist-DB) "einen" XML-Tag abfragen will, der dummerweise in den einzelnen XML-Dateien unterschiedlich geschrieben ist.
Bsp:
XML-Tags: GUID bzw. Guid
XPath: //*[*:GUID="blabla" or *:Guid="blabla"]
so funktioniert das, aber mich würde interessieren, ob es ein Möglichkeit gibt die Groß/Kleinschreibung zu umgehen - d.h. er soll alle Tags mit der Bezeichnung "guid" finden, egal wie das geschrieben ist.
Bin gespannt, ob mir jemand helfen kann ;-)
Antwort schreiben
Antwort 1 von lleopard vom 17.10.2019, 13:26 Options
Hi Teerbaby
Also ich würde sagen das geht mit der LCase-Anweisung
Access sagt dazu:
In diesem Beispiel wird die LCase-Funktion verwendet, um die Buchstaben einer Zeichenfolge in Kleinbuchstaben umzuwandeln.
Dim Groß, Klein
Groß = "Die Antwort ist 42" ' Umzuwandelnde Zeichenfolge.
Klein = Lcase(Groß) ' Liefert "die antwort ist 42".
Wenn du also den Suchstring komplett kleinschreibst und dann nach guid suchst, solltest du -sofern vorhanden - auch guid finden! ;-)
Gruß leo
Antwort 2 von Marie vom 17.10.2019, 13:31 Options
Hm, ich weiss nicht ob sich hier jemand mit xml oder dotnet befasst. Vielleicht fragst Du mal in der Newsgroup Gruppe: microsoft.public.de.german.entwickler.dotnet.csharp
Gruß Marie
Antwort 3 von Marie vom 17.10.2019, 13:31 Options
upps, doch eine antwort da, sorry leo
Antwort 4 von Teerbaby vom 17.10.2019, 13:41 Options
Das Ganze hat ja nichts mit Access zu tun.
Antwort 5 von lleopard vom 17.10.2019, 14:02 Options
Das war ja auch nur ein beispiel...
DotNet kennt die LCase und UCase -Anweisung zB auch.
Aber ich nehme mal an du bist am HP basteln. Auch da wirst du ja deine xml einlesen und kannst über ein vbscript die Datei mit LCase nach guid-Einträgen durchsuchen.
Verstehe jetzt nicht wo dein Problem ist. Denn so oder so kommst du an einem Skript nicht vorbei ...
Antwort 6 von Marie vom 17.10.2019, 14:53 Options
ja liebstes Teerbaby, wie wärs denn, wenn Du uns mal sagen würdest womit es zu tun hat, statt hier den Leo zu rügen, dass es mit Access nix zu tun hat? Das war uns auch klar, dass es mit Access nix zu tun hat.
Du kannst doch nicht einfach hier ne Frage stellen und uns mal raten lassen von welcher Programmiersprache Du sprichst??
Antwort 7 von Teerbaby vom 17.10.2019, 15:48 Options
es geht um einen HTTP-Request mit XPath. Sollte also unabhängig von der Programmiersprache sein (wäre in meinem Fall Java). Im Grunde muss der Request aber auch funktionieren, wenn ich in einfach im Browser ausführe. Wenn ich eine Funktion wie oben beschrieben verwende, habe ich ja nichts gewonnen.
Das heisst aber nicht, dass ich die bisherigen Antworten nicht zu schätzen wüsste.
Ich fürchte auch irgendwie, dass es da keine Lösung gibt und ich alle Möglichkeiten mit ODER-Verknüpfungen abdecken muss. Falls es doch eine gibt müsste das wohl ein XPath-Flag o.ä. sein, dass die Groß/Kleinschreibung ignoriert.
Hatte nur gehofft, dass jemand vielleicht eine bessere Idee hat.
Antwort 8 von lleopard vom 17.10.2019, 16:57 Options
Hallo Marie,
is ja total nett so in Schutz genommen zu werden!! thx ;-)
Nun aber nochmal kurz zu Teerbaby...
Java oder VBScript. Beides geht doch in HP....
und dann liest du die xml-Dateien einfach ein zB über eine Open-Anweisung, packst den gefunden String zusammen, läßt alles kleinschreiben und druchforstest den String dann nach :guid.
Wenn du den Eintrag dann gefunden hast, filterst du die guid raus und fertig...
Warum sollte das nicht gehen???
Antwort 9 von Teerbaby vom 18.10.2019, 08:32 Options
@Leo
ich denke, wir reden etwas aneinander vorbei. Was ich suche ist nur eine andere Form der Abfrage (d.h. ein Request = 1 Zeile). Was ich oben als Beispiel geschrieben habe, entspricht dem SQL "SELECT * FROM Tabelle wHERE GUID='blabla'". Nur, dass es bei einem SQL egal ist wie ich GUID schreibe und alle Felder gefunden werden.
Ich habe jetzt in einem anderen Forum eine Lösung erhalten. Die sieht folgendermaßen aus:
http://localhost:8080/exist/rest/db/testtest?_query=//*[fn:lower-case(fn:local-name(.))='guid'][.="blabla"]
Vielen Dank, für eure Hilfe
Antwort 10 von lleopard vom 18.10.2019, 10:44 Options
Und was hast du jetzt groß anders gemacht als mit lower-case (is ja das gleiche wie lcase, nä!) die zeichenfolge in kleinbuchstaben umgewandelt und nach 'guid' gesucht??
Und das nächste mal solltest du deine Frage vielleicht präziser formulieren ...
Gruß leo
Antwort 11 von Teerbaby vom 18.10.2019, 11:44 Options
Das mit der Formulierung ist nicht immer so einfach. ;)
Ich hatte aber geschrieben, dass ich eine XPath-Abfrage suche und kein Script. Deshalb hab ich das ja auch unter "Datenbanken" gepostet.