Announcement

Collapse
No announcement yet.

Durchsuchen von XML nach Sonderzeichen per SQL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Durchsuchen von XML nach Sonderzeichen per SQL

    Hallo Ihr,

    da ich kein Profi bin, hoffe ich auf Eure Hilfe bei der Lösung zu folgendem Problem. Ich muss etwas ausholen. Hoffentlich ist es verständlich.

    Kurz zum Backround: Wir haben mehrere OracleDBs (10 und 11). In diese wurden gelieferte Dateien mit XML-Inhalten in Tabellen importiert. Die importierten Inhalte haben weiterhin das Format XML.
    Bsp.: <mod inhaltanz="j" name="Test und Test / Test & Test" nameanz="n"><dokument>Hier steht ein toller Text &amp; Sonderzeichen</dokument>...</mod>...

    Problem:
    Ich möchte aus in einer Tabelle, in der Inhalte als XML abgelegt wurden, nach Strings suchen. Das klappt auch soweit, solange es sich um eine normale Zeichenkette handelt (Buchstaben/Ziffern/Freizeichen, z.B."Test und Test"). Wird allerdings nach Sonderzeichen (&,/\?- etc.) gesucht, kommt kein ordentliches Ergebnis zurück. Es ist, als ob er diese Sonderzeichen schlichtweg ignoriert.
    Abgelegt werden die Sonderzeichen in der DB innerhalb der XML-Tags als normale Zeichen, also z.B. "<...name="Test und Test / Test & Test""...>. Sonderzeichen zwischen den xmlTags werden maskiert abgelegt, z.B. "<dokument>... Text &amp; Sonderzeichen</dokument>".

    Frage 1:
    Innerhalb der XML-Tag kann ich ja mit z.B. "contains(TABELLENSPALTE, '%\&amp;% INPATH (/mod/@name)') > 0" abfragen, oder?

    Frage 2:
    Wie frage ich die Strings zwischen dem xmlTags ab? Mit (contains(TABELLENSPALTE, '%'||chr(92)||chr(38)||'%')>0) würde ich ja das gesamte XML durchsuchen, oder? Also auch die spitzen Klammern finden oder?



    Ich habe schon sämtliche mir bekannte DB-Spezis "abgegrast", leider ohne einem Ergebnis. Ihr seit meine Hoffnung. Vielen Dank für Eure Kommentare.

    Lieben Gruß, Anna

  • #2
    Bis auf das & Zeichen kann man das prinzipiell mit den Standard-Mitteln machen. Nun hast Du keine echten Testdaten gepostet also hier mal ein konkretes Beispiel:
    Code:
    WITH DATA AS
      (SELECT XMLTYPE
       ('<HTML>
           <HEAD>
             <TITLE> New Document </TITLE>
           </HEAD>
           <BODY>
             <DOK>größer als: >></DOK>
             <DOK>Semi und Komma:;,</DOK>
             <DOK>Striche:/|\</DOK>
             <DOK>Klammern:)(</DOK>
           </BODY>
         </HTML>') xml_data
         FROM dual) 
       SELECT extractvalue(value(y), '//DOK') ergebnis
         FROM data, TABLE(xmlsequence(extract(xml_data, '//DOK'))) y  
        WHERE extractvalue(value(y), '//DOK') like '%)%'    
           OR extractvalue(value(y), '//DOK') like '%;%'
    
    ERGEBNIS
    ----------------
    Semi und Komma:;,
    Klammern:)(

    Comment

    Working...
    X